我将带有透明alpha的DDS图像(DXT5)加载到OpenGL中。因为alpha不是预乘的,不能根据DXT5 specs预先倍增我在纹理的可见部分周围得到薄的黑色晕,因为我在GPU上做了一些混合操作。我的问题是:什么可以是我最好的解决方法。我的OpenGL渲染器更新每个帧上的场景纹理加载来自IO的那些,所以如果我解压缩DDS然后预先多次,然后压缩回来我得到巨大的开销。我认为另一个选项是添加另一个渲染通道并在片段着色器中进行预乘,然后渲染到纹理,然后将其用于主要传递。这会增加整个管道的开销,因为我已经有一个下降通道数。这里有哪些附加选项?
答案 0 :(得分:0)
为什么不让你的着色器在原地进行alpha的预乘,然后做你正常做的事情?
无需将其渲染到纹理。只需在着色器中预先乘以所有纹理,然后再进行预乘。
答案 1 :(得分:0)
问题解决了。我的DDS纹理已损坏。我在片段着色器中默认进行的手动预乘与有效的DXT5完美配合。