我用这样的GL freeglut创建了一个上下文:
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_STENCIL);用这样的cairo抽签:
if (!device_)
{
device_ = cairo_glx_device_create(glXGetCurrentDisplay(),
glXGetCurrentContext());
}
// else do nothing
auto const surface(cairo_gl_surface_create_for_window(device_,
glXGetCurrentDrawable(), width, height));
auto const cr(cairo_create(surface));
// draw using cairo calls
cairo_destroy(cr);
cairo_gl_surface_swapbuffers(surface); // !!!
cairo_surface_destroy(surface);如果我不调用cairo_gl_surface_swapbuffers(),而是调用glutSwapBuffers(),什么都不会显示,但是有一个错误:
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 156 (GLX)
Minor opcode of failed request: 11 (X_GLXSwapBuffers)
Serial number of failed request: 69
Current serial number in output stream: 72但是,如果我调用cairo_gl_surface_swapbuffers(),但不调用glutSwapBuffers(),则绘图将显示,并且不会出现错误。我如何调用glutSwapBuffers()而不是cairo_gl_surface_swapbuffers()而不触发错误?我想把其他内容和cairo内容混在一起。
发布于 2014-03-24 08:18:45
函数cairo_gl_surface_swapbuffers应该等效于调用cairo_surface_flush,然后调用用于交换缓冲区的正确函数。
所以我想你是在找cairo_surface_flush(surface)
https://stackoverflow.com/questions/22597885
复制相似问题