Allegro显示奇怪的腐败视觉效果

时间:2015-10-29 17:24:35

标签: c osx-elcapitan allegro allegro5

我一直试图使用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的错误吗?

An example of what happens Another example

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

作为对此问题的任何人的说明。问题是OS X El Capitan中的Allegro中的一个错误,解决方案是使用修复错误的Allegro开发版本。

就像几个月前一样,这些变化现在可能在生产版本中。