Я создаю контекст 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
контентом.
GLX
cairo
, я не знаю, создается ли новый. Может кто играл с чем-то подобным. - person user1095108   schedule 24.03.2014