我有一个程序,使用 opengl 和 GLX。一开始我选择了具有以下属性的帧缓冲区配置:
const int attributes[] = {GLX_RENDER_TYPE, GLX_RGBA_BIT, GLX_DOUBLEBUFFER, True, None};
fb_configs = glXChooseFBConfig(display, screen_index, attributes, &fb_configs_count);
当我必须重新渲染窗口时,我会清除屏幕,渲染内容,然后交换缓冲区:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if_render();
glXSwapBuffers(display, drawable);
交换缓冲区后,我看到的不是窗口的内容,而是窗口后面的内容。我的猜测是交换的缓冲区处于某种初始状态,实际上没有渲染到其中。如果我第二次触发缓冲区交换,我的窗口中的内容就会正确显示。
我错过了什么吗?
编辑
Fluxbox 1.3.7 和 mesa 11.0.6 会发生这种情况。我使用直接渲染上下文。