1

我将具有透明 alpha 的 DDS 图像 (DXT5) 加载到 OpenGL 中。因为 alpha 没有预乘并且不能根据 DXT5规范进行预乘,所以我在纹理的可见部分周围出现了薄薄的黑色光晕,因为我在 GPU 上进行了一些混合操作。我的问题是:什么是最好的解决方法为此。我的 OpenGL 渲染器在从 IO 加载的每一帧上更新场景纹理,所以如果我解压缩 DDS 然后 pre-muliply ,然后压缩回来我会得到巨大的开销。我认为的另一个选择是添加另一个渲染通道并做 pre - 在片段着色器中相乘并渲染到纹理,然后将其用于主通道。这增加了整个管道的开销,因为我已经有一个下降通道数。这里有哪些额外的选项?

4

2 回答 2

0

为什么不让你的着色器在原位做 alpha 的预乘,然后做你通常要做的事情?

无需将其渲染为纹理。对于需要预乘的所有纹理,始终在着色器中进行预乘。

于 2012-11-05T15:58:25.483 回答
0

问题解决了。我的 DDS 纹理损坏。我在片段着色器中默认执行的手动预乘法与有效的 DXT5 完美配合。

于 2012-11-09T15:37:02.023 回答