首页 > 解决方案 > openGLES 2 - 有没有办法在不扩展为无符号字节的情况下加载每 1 位一个 alpha 元素的纹理?

问题描述

我有一个位掩码,我想将其设置为要使用的纹理(例如,将 alpha 设置为 0 或 1 的样本,或将其用作模板测试)。

我是否需要将这个现有掩码中的每一位都变成一个字节并使用GL_UNSIGNED_BYTE,还是有更聪明的方法来使用这个掩码?

标签: ccolorsopengl-esopengl-es-2.0

解决方案


OpenGLES 2 只有一种具有单比特 alpha: 的纹理格式GL_UNSIGNED_SHORT_5_5_5_1,即 16 位 RGBA 纹理。如果您使用 15 位 RGB,我会说这是您的最佳选择。使用压缩纹理可能会或可能不会更好地工作。

对于单个位模板,有GL_OES_STENCIL1扩展,但是在 8 位模板中使用单个位平面非常简单(实际上很少有一次使用超过一个位平面)。

使用模板需要您创建、渲染和投影到 RenderBuffer 中,然后将该 RenderBuffer 渲染到下一个目标(例如默认帧缓冲区)。

不确定您的用例,但与将 8 位 alpha 设置为 [0.0,1.0] 并一直滚动相比,我想不出任何值得付出努力的地方。如果您追求性能,请坚持主流解决方案,让驱动程序发挥其魔力。


推荐阅读