Opengl 将RGBA pixmap与纹理混合
我有一个RGBA pixmap(例如,一个抗锯齿圆形4x4点),我想以类似于画笔笔划的方式在纹理上绘制。使用Opengl 将RGBA pixmap与纹理混合,opengl,textures,alpha,alphablending,blending,Opengl,Textures,Alpha,Alphablending,Blending,我有一个RGBA pixmap(例如,一个抗锯齿圆形4x4点),我想以类似于画笔笔划的方式在纹理上绘制。使用glTexSubImage2D的明显解决方案只是覆盖一个矩形区域,而与alpha值无关。有没有比在本地RAM中维护纹理的镜像版本更好的解决方案,在那里进行混合,然后使用glTexSubImage2D上传它-最好是基于OpenGL/GPU的?FBO是我们要走的路吗 此外,在保持1:1的图形质量(无伪影、插值等)和速度方面,使用FBO是否有效?RAM中的4x4对象进行CPU混合基本上就是用基本
glTexSubImage2D
的明显解决方案只是覆盖一个矩形区域,而与alpha值无关。有没有比在本地RAM中维护纹理的镜像版本更好的解决方案,在那里进行混合,然后使用glTexSubImage2D
上传它-最好是基于OpenGL/GPU的?FBO是我们要走的路吗
此外,在保持1:1的图形质量(无伪影、插值等)和速度方面,使用FBO是否有效?RAM中的4x4对象进行CPU混合基本上就是用基本浮点算法转换4x4矩阵,总共16次简单的数学迭代&1glTexSubImage2D
call。。。设置FBO、切换渲染上下文和渲染速度是否更快
非常感谢基准测试数据以及建议解决方案的MVCE/伪代码
注意:为每个笔划创建单独的alpha混合四边形不是一个选项,主要是因为使用了非常多的笔划。去科学 可以使用(FBO)渲染到纹理 在程序开始时,创建FBO并将纹理附加到它。每当需要绘制笔划时,绑定FBO并绘制笔划,就像绘制到屏幕上一样(使用三角形)。笔划将写入附着的纹理 对于主绘制循环,取消绑定FBO,绑定附加纹理,并在整个屏幕上绘制四元体(从-1,-1到1,1,不使用任何矩阵)
此外,在保持1:1的图形质量(无伪影、插值等)和速度方面,使用FBO是否有效 对
- 如果附加的纹理与窗口一样大,则不存在瑕疵
- 添加新笔划时只需切换到FBO,之后可以忽略笔划,因为它已渲染到纹理
- GPU完成了所有的采样、插值、混合等工作,而且比CPU做得好得多(毕竟,这是GPU的设计初衷)
- 更换FBO并没有那么贵。现代游戏可以在一帧中多次切换FBO以渲染纹理,同时仍然可以输出数千个三角形;即使在移动平台上,每帧一个FBO交换机也不会杀死2D应用程序