我正在开发一个纯2D项目,其中屏幕由CPU渲染,我想将其显示为纹理,但我不想为每个帧上传整个图像。我不知道哪些部分被改变了,所以我认为整个图像无效。
我需要进行一些后期处理(添加另一层有一些blits),我的早期测试显示它可能是纯粹用CPU做的性能问题,这就是我需要GPU加速的原因(2D会好得多,但是在这些日子里不常见/便携......)。
我的目标平台是一个嵌入式系统(ARM),其中GPU和CPU共享内存,因此理论上我可以在没有任何副本的情况下执行此操作。所选平台支持OpenGL 2.1和OpenGL ES 3.0。
据我所知,缓冲区对象可以通过glMapBufferRange()进行映射。我照顾了下面的可能性:
UNIFORM_BUFFER:太小而无法存储全屏图片
SHADER_STORAGE_BUFFER:仅支持ES 3.1
着色器图像加载存储:仅支持ES 3.1
缓冲区纹理:ES 3.0不支持(支持??)
像素缓冲区对象:我无法从着色器到达它们,在我看来,当我从中更新纹理时 进行复制。我不知道它是否比从客户端内存复制更快(考虑到它们都驻留在同一个RAM芯片上:))
普通纹理:不是缓冲区对象,不能映射到客户端进程内存
我错过了什么吗? ES 3.0中没有办法与包含大量数据的GPU共享缓冲区,我可以从CPU写入并从片段着色器中读取数据?
答案 0 :(得分:0)
您可以使用GLES20.glTexSubImage2D
部分更改纹理。