c - openGLES 2 - 有没有办法在不扩展为无符号字节的情况下加载每 1 位一个 alpha 元素的纹理?
问题描述
我有一个位掩码,我想将其设置为要使用的纹理(例如,将 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] 并一直滚动相比,我想不出任何值得付出努力的地方。如果您追求性能,请坚持主流解决方案,让驱动程序发挥其魔力。
推荐阅读
- excel - 如何在具有过滤器的数据透视表(Excel for Mac)中获得不同的计数?
- android - SPI驱动,搜索从哪里开始
- excel - 如何在数据透视表中的多列小计中找到百分比
- ios - 在 Swift 中使用 WillSpeakRange 委托中断 AVSpeechUtterance 并恢复
- html - 可访问性:输入元素可访问性的帮助文本
- php - Composer 自动加载某些子文件夹中缺少的类
- docker - InfluxDB docker 容器磁盘使用情况
- c - STM32F207 Nucleo144板,写入永久内存
- ios - PresentationButton 没有触发两次动作
- python - 让我的 python 脚本工作并调用我的变量的问题