我正在使用cairo(http://cairographics.org)与基于OpenGL的3D图形库相结合 .
我希望得到一个独立于平台的答案 . 这都是在c中完成的 .
我有直接的方法工作,使用 cairo_image_surface_create 与 glTexImage2D 组合来获得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 回答
我是用GL_BGRA做的 .
然后做
在创建纹理时 . 当图像内容发生变化时,使用glTexSubImage2D(...)更新纹理 . 对于速度,将纹理的过滤器设置为GL_NEAREST
浮华渲染器已经被实验性的cairo-gl后端所取代 .
你会发现它的提及:http://cairographics.org/OpenGL/
不能说它是否足够稳定可以使用 .
一旦你有一个gl后端工作,你可以渲染到一个Framebuffer对象直接渲染给定的纹理 .
截至2015年,Cairo GL SDL2可能是使用Cairo GL的最佳方式
https://github.com/cubicool/cairo-gl-sdl2
如果您使用的是像Ubuntu这样的操作系统,其中cairo不是用GL编译的,那么你需要编译自己的副本,让cairo-gl-sdl2知道它在哪里 .