我正在将cairo(http://cairographics.org)与基于OpenGL的3D图形库结合使用 我目前正在Windows上使用3D库,但我希望得到一个独立于平台的答案。 这都是用c ++完成的。
我已经采用了直接的方法,将 cairo_image_surface_create 与 glTexImage2D 结合使用,以获得OpenGL纹理。
但是,从我可以从文档 cairo_image_surface_create 中收集到的内容,我使用基于CPU的渲染器并将输出写入主内存。
我已经明白了cairo有一个新的基于OpenGL的渲染器,它直接在GPU上渲染输出,但我无法找到有关如何使用它的具体细节。
(我已经找到了浮华渲染器的一些细节,但似乎已被弃用并删除)。
我已经检查过表面列表:http://www.cairographics.org/manual/cairo-surfaces.html,但我觉得我错过了明显的表现。
我的问题是:如何创建直接渲染到OpenGL纹理的cairo曲面? 请注意:我需要能够直接使用纹理(不复制)在屏幕上显示cairo输出。
答案 0 :(得分:1)
浮华渲染器已经被实验性的 cairo-gl 后端所取代。
你会发现它的提及: http://cairographics.org/OpenGL/
不能说它是否足够稳定以供使用。
一旦你有一个gl后端工作,你可以渲染到 Framebuffer对象直接在给定纹理中渲染。
答案 1 :(得分: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
答案 2 :(得分:1)
截至2015年,开罗GL SDL2可能是使用Cairo GL的最佳方式
https://github.com/cubicool/cairo-gl-sdl2
如果您使用的是Ubuntu操作系统,其中cairo未使用GL编译,则需要编译自己的副本,让cairo-gl-sdl2知道它的位置。