我想使用OpenGL尽可能快地在屏幕上绘制像素数据(RGB /灰度值)的2D数组.像素数据经常变化.
我曾希望我能找到一个简单的函数,让我可以将指针推送到代表像素数据的数组,因为这可能是最快的方法.不幸的是,我没有找到这样的功能.
完成此任务的最佳方法是什么?
我最近遇到了类似的问题,因为我试图将视频渲染到屏幕上(即重复将像素数据上传到VRAM),我的方法是:
使用glTexImage2D和glTexSubImage2D将数据上传到纹理(即在调用之前绑定纹理(和纹理单元,如果适用))
在我的情况下,因为视频帧速率(通常约为24 fps)低于我的应用程序的帧速率(目标为60 fps),为了避免再次上传相同的数据,我使用了一个帧缓冲对象(请查看glGenFramebuffers/glBindFramebuffer/glDeleteFramebuffers)并将我的纹理与framebuffer(glFramebufferTexture2D)链接起来.然后我上传一次该纹理,并多次绘制相同的帧(使用glBindTexture进行普通纹理访问)
我不知道你正在使用哪个平台,但是因为我正在使用Mac,我使用一些Apple扩展来确保通过DMA发送到VRAM的数据(即让glTexSubImage2D立即返回以让CPU做其他工作) - 请感受如果你也使用Mac,可以免费向我询问更多信息
另外,当您使用灰度时,您可能需要考虑仅使用GL_LUMINANCE纹理(即每像素1个字节)而不是基于RGB的格式来使上传更快(但这取决于纹理数据的大小,我是流式传输高清1920x1080视频,所以我需要确保保持低位)
还要注意硬件使用的格式以避免不必要的数据转换(即通常使用BGRA数据似乎比仅使用RGB更好)
最后,在我的代码中,我用着色器替换了所有固定管道功能(特别是将数据从灰度或YUV格式转换为RGB),但所有这些都取决于数据的大小,以及CPU的工作负载或GPU
希望这有帮助,如果您需要更多信息,请随时给我留言
| 归档时间: | 
 | 
| 查看次数: | 18997 次 | 
| 最近记录: |