我有一个程序,使用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。 我使用直接渲染上下文。