在OpenGL ES中使用8位alpha通道的调色板纹理

时间:2009-01-11 19:07:17

标签: iphone opengl-es texturing

我可以在OpenGL ES中使用RGB调色板和8位Alpha通道获取调色板纹理吗? (我的目标是iPhone OpenGL ES实现。)在窥视OpenGL文档之后,我觉得在调色板中支持带有alpha的调色板纹理,即。纹理包含8位索引到具有256种RGBA颜色的调色板中。我想要一个包含8位索引的纹理到RGB调色板一个独立的8位alpha通道。 (我试图节省内存和32位RGBA纹理是相当奢侈的。)或者这应该是手工完成的,即。通过创建两个独立纹理,一个用于颜色,一个用于alpha贴图,并手动组合它们?

3 个答案:

答案 0 :(得分:2)

没有。一般来说,图形芯片真的不喜欢托盘化纹理(为什么?因为从中读取任何纹素需要两个内存读取,一个是索引,另一个是调色板。正常读取的延迟加倍。)

如果您只是在保存内存后,请查看压缩纹理格式。特别是在iPhone中,它支持2位/像素和4位/像素的PVRTC压缩格式。压缩是有损的(就像调色板压缩通常是有损的),但内存和带宽节省是巨大的。

答案 1 :(得分:1)

<强>声明: 此信息基于官方OpenGL | ES规范。我不知道iphone上的OpenGL | ES实现是否支持压缩纹理。理论上它应该至少模拟压缩纹理,但你现在永远不会。

您可以通过glCompressedTexImage2D调用加载8位/像素纹理。您最想使用的压缩类型是GL_PALETTE8_RGBA8_OES

不能直接存储额外的alpha通道和调色板。您可以将第二个纹理单位用于alpha分量,或者在颜色量化期间考虑alpha并使用包含alpha的调色板格式。

网上有一个名为BRIGHT的命令行颜色量化工具。它在使用alpha量化图像方面做得非常出色。你可能想尝试一下..

答案 2 :(得分:1)

调色板纹理将在iPhone的GPU加载时展开,因此除了存储大小之外,使用它们不会获得任何优势。对于卡通风格游戏,最好的选择是探索使用PVRTC压缩纹理(如NeARAZ所说)和16位纹理(用于alpha的RGBA4444,用于穿透的RGBA5551,用于不透明纹理的RGB565)。使用两者的混合是我自己的方法。