繁体   English   中英

将RGBA像素图与纹理混合

[英]mix RGBA pixmap with texture

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

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

基准数据以及提议的解决方案的MVCE /伪代码将非常值得赞赏。

注意:不能为每个笔划创建单独的alpha混合四边形,这主要是因为使用了很多笔划。 去科学!

您可以使用帧缓冲对象 (FBO)渲染为纹理。

在程序开始时,创建一个FBO并将纹理附加到它。 每当您需要绘制笔划时,请绑定FBO并像将其绘制到屏幕上一样绘制该笔划(带有三角形)。 笔触将写入到附加的纹理中。

对于主绘制循环,请取消绑定FBO,绑定附加的纹理,然后在整个屏幕上绘制一个四边形(从-1,-1到1,1,而不使用任何矩阵)。


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

是。

  • 如果附着的纹理与窗口一样大,则没有任何伪像。
  • 添加新笔触时只需要切换到FBO,之后您就可以忘记该笔划了,因为它已经渲染到纹理上了。
  • 该GPU做了所有的取样,插值,混合等的,这是它好得多比CPU(毕竟,这是什么GPU是专门为)
  • 开关FBO的是不 现代游戏可以将FBO切换为每帧几次渲染到纹理,同时仍然抽出数千个三角形。 每帧一个FBO开关即使在移动平台上也不会杀死2D应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM