Allegro.cc - Online Community

Allegro.cc Forums » Programming Questions » Flicker with Fullscreen

This thread is locked; no one can reply to it. rss feed Print
Flicker with Fullscreen
zer0
Member #6,501
October 2005
avatar

First, heres my draw code:

1 //DRAW DISPLAY
2 
3 // clear dblBuff and lock the screen (not sure what the purpose is yet, though :P)
4 acquire_screen();
5 clear(dblBuff);
6 
7 
8 // Draw the snow, shifted by scroll. Two blits.
9 blit(landscape, dblBuff, scroll, 0, 0, SCREEN_H - landscape->h, landscape->w - scroll, landscape->h);
10 blit(landscape, dblBuff, 0, 0, landscape->w - scroll, SCREEN_H - landscape->h, scroll, landscape->h);
11 
12 // Draw all the background snowflakes
13 for( std::vector<SFlake *>::iterator iter = BackFlakes.begin();
14 iter != BackFlakes.end(); iter++ )
15 {
16 (*iter)->Draw(dblBuff);
17 }
18 
19 // Draw all enemies.
20 for( std::vector<Enemy *>::iterator iter = enemies.begin();
21 iter != enemies.end(); iter++ )
22 {
23 (*iter)->Draw(dblBuff);
24 }
25 
26 // Draw all bullets.
27 for( std::vector<Bullet *>::iterator iter = bullets.begin();
28 iter != bullets.end(); iter++ )
29 {
30 (*iter)->Draw(dblBuff);
31 }
32 
33 // draw all particles.
34 for( std::vector<Particle *>::iterator iter = particles.begin();
35 iter != particles.end(); iter++ )
36 {
37 (*iter)->Draw(dblBuff);
38 }
39 
40 // draw powerups
41 for( std::vector<Powerup *>::iterator iter = pUps.begin();
42 iter != pUps.end(); iter++ )
43 {
44 (*iter)->Draw(dblBuff);
45 }
46 
47 // draw the player
48 playa.Draw(dblBuff);
49 
50 // let the playe rknow the map has restarted
51 if( restart_timer > 0 )
52 {
53 draw_sprite( dblBuff, restart, 160, 228 );
54 }
55
56 if( show_level_timer > 0 )
57 {
58 draw_level_sprite(dblBuff, level_sprite, level_nums[level-1]);
59 }
60 
61 // draw foreground snowflakes
62 for( std::vector<SFlake *>::iterator iter = ForeFlakes.begin();
63 iter != ForeFlakes.end(); iter++ )
64 {
65 (*iter)->Draw(dblBuff);
66 }
67 
68 textprintf(dblBuff, font, 10, 10, makecol(255,255,255), "FPS: %d", fps );
69 textprintf(dblBuff, font, 10, 20, makecol(255,255,255), "HEALTH: %d", playa.health );
70 blit( dblBuff, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H );
71 release_bitmap(screen);
72 frames_drawn++;

Now, whenever I run this program in fullscreen (640x480) at a color depth of 16, it flickers. But only when I don't run it from Visual Studio .NET 2003. If I just compile and run it from the GUI, it works fine. So I tried putting in vysnc();, and it locks my FPS at 60, but flickers even worse. Then I tried messing around with video_bitmaps, aquire bitmap, etc., all for nothing. And this is for a christmas hack game, but I was just hoping I could put it out in fullscreen, not windowed.

Tobias Dammers
Member #2,604
August 2002
avatar

First of all: Separate logic and drawing code. Anything that modifies the player or any other data structure should not be touched while drawing.
Secondly; (un)locking the screen is a good idea, but only right before and after you blit to it. No use locking screen when you're drawing to the back buffer (in fact, that's the purpose of double buffering).

---
Me make music: Triofobie
---
"We need Tobias and his awesome trombone, too." - Johan Halmén

Go to: