简体   繁体   中英

C++ Allegro visual glitch

I am training in using the allegro library with c++ but I am getting an issue, while using large images for parrallax backgrounds i get a constant sort of load/glitch scrolling down the screen, making all my images flicker for a bit, is there a way to load backgrounds without having such an issue? The flicker does not appear when I try to print the screen.

Thanks

The flickering is most likely a result of you redrawing your scene, and the monitor refreshing partway through.

The cure for this is to use double buffering. Read this:

http://wiki.allegro.cc/index.php?title=Double_buffering

There is another artifact called 'tearing', which is caused by blitting your buffer during a refresh cycle. This is generally solved by waiting for a vertical sync (retrace) and then drawing, but that's a little oldschool now that most of us use libraries such as OpenGL or DirectX to talk to our graphics hardware.

Nevertheless, Allegro provides a function that waits for the vertical retrace to begin, which is the time at which you can safely blit your buffer without worrying about tearing. See here:

https://www.allegro.cc/manual/4/api/graphics-modes/vsync

I cannot promise that this is the solution, but looking at your code, I don't understand why you are creating multiple buffers.

bufDisplay = al_create_bitmap(WIDTH, HEIGHT);
buffer = al_create_bitmap(WIDTH, HEIGHT);

Unless you are doing some type of special effect that requires buffers, they are unnecessary. Allegro 5 already provides a double buffer with default settings.

Just draw everything to the default target bitmap (the display's back buffer), and then al_flip_display() .

If you want to center or scale your output to a different sized window, you can usually just use transformations.

I don't know why you are calling Sleep(8) .

If using Windows, you could switch to using OpenGL (set the ALLEGRO_OPENGL display flag).

You should try other Allegro games and demos (plenty come with the source) to see if it's a problem on all of them.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM