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

标签 c osx-elcapitan allegro allegro5

我一直在尝试使用 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;
}

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

An example of what happens Another example

最佳答案

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

关于c - 快板显示奇怪的腐败视觉效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33420820/

相关文章:

c - 从数组中读取两个字符作为C中的一个十六进制数

c++ - 指向结构体指针的点运算符

python - OS X El Capitan 上的 SDL_image 视觉故障

objective-c - CALayer 的 magnificationFilter 在 OS X 上被忽略

c++ - 快板 5 : trouble storing bitmaps in a std map

C++ - 为什么 [pointer] 和 this->[pointer] 给出不同的值?

C-函数和数组

c++ - Emacs、Cedet 和语义

keychain - Mac OS X El Capitan Smart Card Services PKCS#11 Tokend 编译安装

c++ - 如何将 OpenGL 加载到 Visual Studio 2012