ошибка с комбинацией cairo + freeglut

Я создаю контекст 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 контентом.


person user1095108    schedule 23.03.2014    source источник
comment
Если Каир оборачивает GLX, как это предполагает, то вам следует пройти через это. FreeGLUT будет делать предположения, которые могут оказаться неверными, если cairo будет разрешено управлять такими вещами, как активный контекст GLX вызывающего потока.   -  person Andon M. Coleman    schedule 24.03.2014
comment
конечно, но я инициализирую его с контекстом GLX cairo, я не знаю, создается ли новый. Может кто играл с чем-то подобным.   -  person user1095108    schedule 24.03.2014


Ответы (1)


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

Я так понимаю, вы ищете cairo_surface_flush(surface)?

person Uli Schlachter    schedule 24.03.2014
comment
Не заходит, все равно ошибка вылезает. Если у вас есть рабочий пример, выложите. - person user1095108; 24.03.2014
comment
Прошло 7 лет, и теперь я думаю, что вы были правы. - person user1095108; 16.06.2021