首页 文章

将cairo曲面直接渲染为OpenGL纹理

提问于
浏览
14

我正在使用cairo(http://cairographics.org)与基于OpenGL的3D图形库相结合 .
我希望得到一个独立于平台的答案 . 这都是在c中完成的 .

我有直接的方法工作,使用 cairo_image_surface_createglTexImage2D 组合来获得OpenGL纹理 .

但是,从我从文档中收集到的内容 cairo_image_surface_create 使用基于CPU的渲染器并将输出写入主内存 .

我've come to understand cairo has a new OpenGL based renderer which renders its output directly on the GPU, but I'm无法找到有关如何使用它的具体细节 .
(我已经找到了浮华渲染器的一些细节,但它似乎被弃用并删除了) .

我已经检查了表面列表:http://www.cairographics.org/manual/cairo-surfaces.html,但我觉得我错过了显而易见的事实 .

我的问题是:如何创建直接渲染到OpenGL纹理的cairo表面?
请注意:我需要能够直接使用纹理(不复制)在屏幕上显示cairo输出 .

3 回答

  • 1

    我是用GL_BGRA做的 .

    int tex_w = cairo_image_surface_get_width(surface);
    int tex_h = cairo_image_surface_get_height(surface);
    unsigned char* data = cairo_image_surface_get_data(surface);
    

    然后做

    glTexImage2D(GL_TEXTURE_2D, 0, 4, tex_w,tex_h, 0,GL_BGRA, GL_UNSIGNED_BYTE, data);
    

    在创建纹理时 . 当图像内容发生变化时,使用glTexSubImage2D(...)更新纹理 . 对于速度,将纹理的过滤器设置为GL_NEAREST

  • 1

    浮华渲染器已经被实验性的cairo-gl后端所取代 .

    你会发现它的提及:http://cairographics.org/OpenGL/

    不能说它是否足够稳定可以使用 .

    一旦你有一个gl后端工作,你可以渲染到一个Framebuffer对象直接渲染给定的纹理 .

  • 1

    截至2015年,Cairo GL SDL2可能是使用Cairo GL的最佳方式

    https://github.com/cubicool/cairo-gl-sdl2

    如果您使用的是像Ubuntu这样的操作系统,其中cairo不是用GL编译的,那么你需要编译自己的副本,让cairo-gl-sdl2知道它在哪里 .

相关问题