代码之家  ›  专栏  ›  技术社区  ›  user1095108

cairo+freeglut组合错误

  •  1
  • user1095108  · 技术社区  · 12 年前

    我做了一个 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() 而不触发错误?我想混合其他内容 开罗 所容纳之物

    1 回复  |  直到 12 年前
        1
  •  1
  •   Uli Schlachter    12 年前

    函数 cairo_gl_surface_swapbuffers 应等同于调用 cairo_surface_flush 然后调用正确的函数来交换缓冲区。

    所以我猜你在找 cairo_surface_flush(surface) ?