【发布时间】:2014-03-23 22:19:29
【问题描述】:
我用freeglut 制作了一个GL 上下文,如下所示:
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 内容混合在一起。
【问题讨论】:
-
如果 Cairo 如此建议包装 GLX,那么您应该通过它。如果允许 cairo 管理诸如调用线程的活动 GLX 上下文之类的事情,FreeGLUT 将做出可能不成立的假设。
-
当然,但是我用
cairo的GLX上下文初始化它,我不知道是否正在创建一个新的。也许有人一直在玩类似的东西。
标签: c++ opengl glut cairo freeglut