将RGBA32像素直接存储到OpenGL ES纹理中

时间:2011-12-09 16:52:49

标签: qt opengl-es gpu hardware-acceleration pbo

我正在使用一个库,它为我提供了我必须对屏幕进行blit的帧。我分配了一个缓冲区,这个库直接写入这个缓冲区。当我需要时,我必须将此缓冲区的指定部分blit到屏幕上。我正在使用Qt和OpenGL / ES绘图引擎进行渲染。

问题是:对屏幕进行blit的最快方法是什么?我目前正在使用接受数据指针的构造函数在QImage中加载缓冲区。这应该避免任何副本。然后,我使用QPainter的drawImage方法向屏幕显示正确的区域。我想这个方法会将区域的副本加载到GPU内存中,然后使用和OpenGL纹理对屏幕进行blits。

是否有可能避免此副本加速进程?例如,是否可以直接在OpenGL纹理中绘制,以便我不必转移到GPU?我读了像素缓冲对象。可能是一个解决方案吗?我可以为此目的使用QGLFramebufferObject吗?

1 个答案:

答案 0 :(得分:1)

最终你必须写入GPU,你所能做的就是尽量减少从RGBA到BGRA的不必要副本和任何CPU内转换的数量。

我将从QImage和QPainter开始,看看图形速度是否是开始无人值守之前的限制步骤。

看看this link

请注意,很多一般的OpenGL建议都不适用于opengl-ES,最好将ES视为一个完全独立于openGL的概念。