写入帧缓冲区颜色缓冲区的alpha通道

时间:2014-04-24 16:18:46

标签: android ios opengl-es-2.0

GLES 2.0规范说RGBA4444是帧缓冲区的有效颜色类型。在渲染到纹理时,如何将数据写入Alpha通道?可以从片段着色器完成吗?可以在没有支持ES 2.0的所有iOS和Android设备上都没有的任何扩展的情况下完成吗?

这对于景深效果非常有用,其中混淆圆的大小可以编码到Alpha通道中的每个像素中。

最好不要求特殊的片段着色器写入alpha通道。否则,在将场景渲染到用于模糊计算的帧缓冲区而不是直接渲染到主缓冲区时,必须换掉所有着色器。

2 个答案:

答案 0 :(得分:0)

使用RGBA4444实现性能可能会带来一些好处。最后,每种颜色+ alpha的位分辨率是8888计数器部分的一半。

据我所知,您的纹理需要以某种方式转换以反映格式。

如果不是严格要求的话,我猜你在8888格式中通常会采用相当麻烦的方法。

另一项任务是在实际使用之前转换纹理的格式,但最终这是一个相当昂贵的过程。

这里有一个非常好的讨论:

Creating and loading .pngs in RGBA4444 RGBA5551 for openGL

我希望能以某种方式提供帮助。

莫里吉奥

答案 1 :(得分:-1)

是的,您可以更改片段着色器中的Alpha通道。您不需要任何特定扩展来访问片段着色器中的Alpha通道。数据可以像这样简单地编写:

gl_FragColor.a = your_float_value; // set alpha separately
gl_FragColor = your_vec4_value; // alpha is a part of vec4 value (a or w component)

您需要更改着色器以计算适当的Alpha值并设置Alpha通道。