繁体   English   中英

openGLES 2-如何在不扩展为32位RGBA的情况下加载具有8位灰度和8位alpha的纹理?

[英]openGLES 2 - How do I load a texture with 8-bit grayscale and 8-bit alpha, without expanding to 32-bit RGBA?

我们正在尝试优化程序中的内存使用情况,并且我们注意到某些纹理可以以带有alpha值的灰度存储,就像当以RGBA存储时,RGB值都一样。

我们只想存储2个通道(灰度级和Alpha级),都希望节省磁盘空间和内存,这两个通道都是8位的。 因此,与32位RGBA相比,磁盘和内存节省了50%。

但是,我们遇到的障碍是我们无法解决如何将此信息提供给openGL。 我们可以将映像存储在磁盘上为一个具有两个8位通道的映像,或者作为两个具有一个8位通道的映像。 我找不到openGL将其视为灰度图像的方法,因此它在内存中仅具有这两个通道,而没有将它们视为红色和绿色之类的特定颜色-因为我发现GL_RG8存在且具有正确的数字通道深度正确,但颜色错误。

在openGLES 2中甚至可能吗? 我们能否给openGL提供2个通道,并告诉他们它们不是红色和绿色,而是灰色和Alpha?

我已经看到了这个问题: 我可以在OpenGL glTexImage2D函数中使用灰度图像吗? 但这已经很老了,现在已经删除了GL_LUMINANCE。

请注意, GL_RG8仅存在于OpenGL ES 3.x或更高版本中。 它不是OpenGL ES 2.x的一部分。 对于ES 2.x,可以使用GL_LUMINANCE_ALPHA 它已被弃用,但未删除,因此仍然可以正常工作。

如果您确实要使用GL_RG8则可以通过使用着色器代码中的毛刺来重新排列通道,从而解决“错误颜色”的问题,也可以通过设置TEXTURE_SWIZZLE_[R|G|B|A]使用glTexParameteri()

如果您不介意,我会注意到我遇到的每个ES2实现(iOS,Angle,Adreno,Mali和其他一些奇怪的Android驱动程序)都默默支持GL_RG8(用于格式)(和GL_RG用于internalFormat)。

暂无
暂无

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

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