Я делаю 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
содержание.
Функция cairo_gl_surface_swapbuffers
должен быть эквивалентен звонку cairo_surface_flush
и впоследствии вызывая правильную функцию для замены буферов.
Так что я думаю, что вы ищете cairo_surface_flush(surface)
?
Других решений пока нет …