Opengl 将RGBA pixmap与纹理混合

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混合基本上就是用基本

我有一个RGBA pixmap(例如,一个抗锯齿圆形4x4点),我想以类似于画笔笔划的方式在纹理上绘制。使用
glTexSubImage2D
的明显解决方案只是覆盖一个矩形区域,而与alpha值无关。有没有比在本地RAM中维护纹理的镜像版本更好的解决方案,在那里进行混合,然后使用
glTexSubImage2D
上传它-最好是基于OpenGL/GPU的?FBO是我们要走的路吗

此外,在保持1:1的图形质量(无伪影、插值等)和速度方面,使用FBO是否有效?RAM中的4x4对象进行CPU混合基本上就是用基本浮点算法转换4x4矩阵,总共16次简单的数学迭代&1
glTexSubImage2D
call。。。设置FBO、切换渲染上下文和渲染速度是否更快

非常感谢基准测试数据以及建议解决方案的MVCE/伪代码


注意:为每个笔划创建单独的alpha混合四边形不是一个选项,主要是因为使用了非常多的笔划。去科学

可以使用(FBO)渲染到纹理

在程序开始时,创建FBO并将纹理附加到它。每当需要绘制笔划时,绑定FBO并绘制笔划,就像绘制到屏幕上一样(使用三角形)。笔划将写入附着的纹理

对于主绘制循环,取消绑定FBO,绑定附加纹理,并在整个屏幕上绘制四元体(从-1,-1到1,1,不使用任何矩阵)


此外,在保持1:1的图形质量(无伪影、插值等)和速度方面,使用FBO是否有效

  • 如果附加的纹理与窗口一样大,则不存在瑕疵
  • 添加新笔划时只需切换到FBO,之后可以忽略笔划,因为它已渲染到纹理
  • GPU完成了所有的采样、插值、混合等工作,而且比CPU做得好得多(毕竟,这是GPU的设计初衷)
  • 更换FBO并没有那么贵。现代游戏可以在一帧中多次切换FBO以渲染纹理,同时仍然可以输出数千个三角形;即使在移动平台上,每帧一个FBO交换机也不会杀死2D应用程序

上校,我已经决定采用你的方法——但有一件事让我感到不安。。。我希望笔划与alpha混合添加到纹理中-是否可以使用FBO作为在其自身上渲染的纹理,或者我应该使用2个纹理和/或2个FBO?是不是“把纹理画在自己身上”UB?如果是这样的话,你能找到任何关于这一点的硬参考吗?亲爱的选民:你愿意解释一下我的问题出了什么问题吗?