我正在使用一个库,它为我提供了我必须对屏幕进行blit的帧。我分配了一个缓冲区,这个库直接写入这个缓冲区。当我需要时,我必须将此缓冲区的指定部分blit到屏幕上。我正在使用Qt和OpenGL / ES绘图引擎进行渲染。
问题是:对屏幕进行blit的最快方法是什么?我目前正在使用接受数据指针的构造函数在QImage中加载缓冲区。这应该避免任何副本。然后,我使用QPainter的drawImage方法向屏幕显示正确的区域。我想这个方法会将区域的副本加载到GPU内存中,然后使用和OpenGL纹理对屏幕进行blits。
是否有可能避免此副本加速进程?例如,是否可以直接在OpenGL纹理中绘制,以便我不必转移到GPU?我读了像素缓冲对象。可能是一个解决方案吗?我可以为此目的使用QGLFramebufferObject吗?
答案 0 :(得分:1)
最终你必须写入GPU,你所能做的就是尽量减少从RGBA到BGRA的不必要副本和任何CPU内转换的数量。
我将从QImage和QPainter开始,看看图形速度是否是开始无人值守之前的限制步骤。
看看this link。
请注意,很多一般的OpenGL建议都不适用于opengl-ES,最好将ES视为一个完全独立于openGL的概念。