我与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
内容混合在一起。
答案 0 :(得分:1)
函数cairo_gl_surface_swapbuffers
应该等同于调用cairo_surface_flush
,然后调用正确的函数来交换缓冲区。
所以我猜您正在寻找cairo_surface_flush(surface)
?