Allegro.cc - Online Community

Allegro.cc Forums » Programming Questions » blit crash further down the road!

Credits go to CGamesPlay for helping out!
This thread is locked; no one can reply to it. rss feed Print
blit crash further down the road!
khristina yer
Member #5,795
May 2005
avatar

ok I've got a simple piece of code that shows a similar problem.
Its got something to do with the depth of functions(i think).
Maybe I'm just passing arguments wrongly, well have a look at it for me.

1#include <allegro.h>
2#include <iostream>
3 
4void load_image_depth_one(BITMAP*);
5void load_image_depth_two(BITMAP*);
6 
7int main(int argv,char* argc[])
8{
9 allegro_init();
10 char address[256];
11 install_timer();
12
13 BITMAP* background=NULL;
14 BITMAP* buffer[2];
15
16 set_color_depth(16);
17 set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);
18
19// background=load_bmp("background.bmp",NULL);
20 sprintf(address,"init value of bitmap is %d",background);
21 allegro_message(address);
22 load_image_depth_one(background);
23 sprintf(address,"value after all layers is %d",background);
24 allegro_message(address);
25
26 buffer[0]=create_video_bitmap(800,600);
27 buffer[1]=create_video_bitmap(800,600);
28 int which=0;
29
30 while(TRUE)
31 {
32 blit(background,buffer[which],
33 0,0,0,0,800,600);//draw demon background.
34 show_video_bitmap(buffer[which]);
35 which= 1 - which;
36 }
37 
38}
39 
40void load_image_depth_one(BITMAP* depth_test)
41{
42 char address[256];
43 load_image_depth_two(depth_test);
44 sprintf(address,"depth test in one %d",depth_test);
45 allegro_message(address);
46
47}
48void load_image_depth_two(BITMAP* depth_test)
49{
50 depth_test=load_bmp("background.bmp",NULL);
51 char address[256];
52 sprintf(address,"depth test in two %d",depth_test);
53 allegro_message(address);
54
55}
56
57
58 END_OF_MAIN();

I've included the source and image in the attachment.

CGamesPlay
Member #2,559
July 2002
avatar

Why is this an Allegro Development thread? Did you mean Programming Questions?

When you pass the background pointer to the load_image_depth_one function, you pass a copy of it. When that function changes it, main never knows what the new address is. You need to have the function return the new BITMAP* (BITMAP* load_image_depth_one()), or accept a pointer to a BITMAP*:

void load_image_depth_one(BITMAP** bitmap)
{
    *bitmap = load_bitmap("etc", NULL);
}

Called using:load_image_depth_one(&background);

Please refrain from posting your programming questions to this section of the forum in the future.

--
Tomasu: Every time you read this: hugging!

Ryan Patterson - <http://cgamesplay.com/>

khristina yer
Member #5,795
May 2005
avatar

Quote:

When you pass the background pointer to the load_image_depth_one function, you pass a copy of it.

Oh of course, what was I thinking? No wonder it doesn't work right.

I'm sorry for posting in the wrong forum, I'll post in the right one next time.

I fix that code and it worked correctly.

Go to: