3

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

问题是:blit 到屏幕的最快方法是什么?我目前正在QImage使用接受数据指针的构造函数将缓冲区加载到 a 中。这应该避免任何副本。然后,我使用 blit 的drawImage()方法QPainter到屏幕正确的区域。我猜这个方法会将该区域的副本加载到 GPU 内存中,然后使用 OpenGL 纹理将其传送到屏幕上。

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

4

1 回答 1

1

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

我会从QImageQPainter 开始,看看图形速度是否是开始优化之前的限制步骤。

看看这个链接

请注意,许多通用 OpenGL 建议不适用于 opengl-ES,最好将 ES 视为与 OpenGL 完全不同的概念。

于 2011-12-09T16:59:11.583 回答