我一直试图使用Allegro,但有时当我拨打al_flip_display
而不是预期的结果时,我会看到一个腐败凌乱的废话,有时是白噪声的显示,有时是我屏幕其他部分的部分。对我来说,似乎缓冲区正在与其他东西共享内存,但我不知道是什么导致它。
我试图编写一个演示此问题的最小程序。意味着每次按下一个键时,在显示屏上绘制对角线的另一部分。实际发生的事情是,当我按下一个键时,我得到一个腐败的视觉混乱,然后当我再次按下一个键时,我得到了我所期待的,再次按下它再回到混乱状态,再次按下它给出了我想要的东西。即它似乎只影响其中一个缓冲区。
在按下按键时会发生什么样的事情,在底部会有几个屏幕截图。
有什么想法吗?
代码:
#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_primitives.h>
int main(void)
{
ALLEGRO_DISPLAY *display = NULL;
int i = 0;
if (!al_init()) return 1;
if (!al_init_primitives_addon()) return 1;
display = al_create_display(640, 480);
if (!display) return 1;
for (i=0; i<10; i++) {
al_draw_line(0+i*20, 0+i*20, 50+i*20, 50+i*20, al_map_rgb(255,255,255), 1);
al_flip_display(); // this is where the error happens
getchar(); // wait for next keypress
}
al_destroy_display(display);
return 0;
}
使用Allegro 5.0在OS X El Capitan上编译并执行以下操作:
clang `pkg-config allegro-5.0 allegro_main-5.0 allegro_primitives-5.0 --cflags --libs` test1.c -o test1.o && ./test1.o
请注意,当我在Windows上使用MinGW运行时,这似乎不会发生。只有在我的OS X笔记本电脑上才能实现。 Haven没有尝试过任何其他事情。它可能是OS X中Allegro的错误吗?
答案 0 :(得分:0)
每次翻转时尝试清除后备缓冲。在al_flip_display()
之后,后备缓冲区的内容是未定义的,这意味着OS / gfx驱动程序可以放置/留下任何内容。在循环顶部使用al_clear_to_color
。
答案 1 :(得分:0)
作为对此问题的任何人的说明。问题是OS X El Capitan中的Allegro中的一个错误,解决方案是使用修复错误的Allegro开发版本。
就像几个月前一样,这些变化现在可能在生产版本中。