ошибка с комбинацией каир + фриглут

Я делаю 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

Решение

Функция cairo_gl_surface_swapbuffers должен быть эквивалентен звонку cairo_surface_flush и впоследствии вызывая правильную функцию для замены буферов.

Так что я думаю, что вы ищете cairo_surface_flush(surface)?

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector