c - openGLES 2 - 有没有一种方法可以在不扩展为无符号字节的情况下,以每 1 位加载一个 alpha 元素的纹理?

标签 c colors opengl-es opengl-es-2.0

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

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

最佳答案

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] 一直滚动相比,我想不出任何值得付出努力的地方。如果您追求性能,请坚持使用主流解决方案,让驱动程序发挥其魔力。

关于c - openGLES 2 - 有没有一种方法可以在不扩展为无符号字节的情况下,以每 1 位加载一个 alpha 元素的纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55955756/

相关文章:

c - 链表遍历**while(thead != NULL)**和while(thead->next !=NULL)的区别

C# 删除除两个最低有效位之外的所有颜色

Java:如何获取图像的RGB值?

java - OpenGL ES 1.0 安卓 : Unable to load multiple textures

将 char* 字符串转换为大写

c - execlp 的输出和管道出现问题

Android 和 glOrthof

Android OpenGL 扩展 GLSurfaceView 空指针异常

c - 在 C 中,如果 B 是易变的,表达式 (void)(B = 1) 应该读作 B

Android ColorFilter - Porter-Duff 模式