我有一个RGBA像素图(例如抗锯齿圆形4x4点),我想以类似于画笔笔划的方式在纹理上绘制。使用glTexSubImage2D
的明显解决方案只是覆盖一个不考虑alpha值的矩形区域。有没有比明显在本地RAM中维护镜像版本的纹理更好的解决方案,在那里进行混合然后使用glTexSubImage2D
上传它 - 最好是基于OpenGL / GPU的? FBO是可行的吗?
另外,在维持1:1图形质量(无伪像,插值等)和速度方面,使用FBO是否有效?使用RAM中的4x4对象进行CPU混合基本上是使用基本的浮点算法转换4x4矩阵,总共16个简单的数学迭代& 1 glTexSubImage2D
调用...正在设置FBO,切换渲染上下文&还能更快地完成渲染吗?
基准测试数据非常赞赏,以及建议解决方案的MVCE /伪代码。
注意:为每个笔划创建单独的alpha混合四边形不是一种选择,主要是因为使用了非常多的笔划。 走科学!
答案 0 :(得分:2)
您可以使用framebuffer object(FBO)渲染到纹理。
在程序开始时,创建一个FBO并将纹理附加到它上面。每当需要绘制笔划时,绑定FBO并绘制笔划,就像将其绘制到屏幕上一样(使用三角形)。笔划将写入附加的纹理。
对于主绘制循环,取消绑定FBO,绑定附加的纹理,并在整个屏幕上绘制四边形(从-1,-1到1,1,不使用任何矩阵)。
另外,在维持1:1图形质量(无伪像,插值等)和速度方面,使用FBO是否有效?
是