快板显示奇怪的腐败视觉效果

Allegro displaying weird corrupt visuals

我一直在尝试使用 Allegro,但发现有时当我调用 al_flip_display 而不是预期的结果时,我会显示损坏的乱七八糟的废话,有时是白噪声,有时是我的其他部分的部分屏幕。在我看来,缓冲区似乎正在与其他东西共享内存,但我不知道是什么原因造成的。

我已经尝试编写一个最小的程序来演示这个问题。意味着每次按下一个键时,都会在显示屏上绘制另一段对角线。实际发生的是,当我按下一个键时,我得到了一个损坏的视觉混乱,然后当我再次按下一个键时,我得到了我所期待的,再次按下它又回到了混乱,再次按下它给出了我想要的。 IE。它似乎只影响其中一个缓冲区。

底部有几个屏幕截图,说明按下某个键时会发生什么样的事情。

有什么想法吗?

代码:

#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;
}

在 OS X El Capitan 上用 Allegro 5.0 编译和执行:

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 笔记本电脑上才会发生这种情况。还没有在其他任何东西上尝试过。这可能是 OS X 中 Allegro 的错误吗?

尝试在每次翻转时清空后备缓冲区。在 al_flip_display() 之后,后台缓冲区的内容未定义,这意味着 OS/gfx 驱动程序可以 put/leave 那里的任何内容。在循环的顶部使用 al_clear_to_color

请注意任何遇到此问题的人。这个问题是 OS X El Capitan 中 Allegro 的一个错误,解决方案是使用修复了错误的 Allegro 开发版本。

因为这是几个月前的事,这些更改现在可能在生产版本中。