OpenGL:是否可能具有16位内部格式,类似于亮度 alpha
OpenGL: are 16bit internal formats resembling Luminence + Alpha possible?
i具有一个发光α纹理,每个像素具有两个字节,第一个字节是发光,第二个字节是alpha。
是否可以将其上传到GPU中,以便(在片段着色器中)Alpha组件始终指Alpha,无论使用哪种纹理,而不会浪费绿色和蓝色通道的纹理内存?
// fragment shader
vec4 px = texture(tex, uv);
px.r; // is luminescence
px.a; // is alpha (note that .a is used, not .g which would be green for 32bit RGBA textures)
我要避免将GL_RG用作内部格式的原因,是因为这需要我在着色器中使用单独的编码器进行32位RGBA纹理,并且我想避免为不同纹理类型设置制服/条件。
(如果常见的GPU能够消除G和B通道的内存开销,如果它们为RGBA内部格式为空/冗余,那也可以)
我要避免将GL_RG用作内部格式的原因,是因为这需要我在着色器中使用单独的编码器,用于32位RGBA纹理
内部格式定义存储在纹理中的组件。但是,您可以通过使用swizzle面膜进行纹理来调整您的获取。要模仿带有RG的亮度/alpha,您会这样做:
GLint swizzleMask[] = {GL_RED, GL_RED, GL_RED, GL_GREEN};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 将函数类成员映射到类本身内部
- 将"打开的CV图像"中的"颜色"转换为整数格式
- TDateTime格式在C++Builder中不会更改
- Boost Spirit,获取迭代器内部语义动作
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 内联函数中具有内部链接的全局变量
- 在函数内部的声明中初始化数组,并在外部使用它
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 检查不带转换的扫描格式
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 卷曲bracers内部结构的声明
- 是否可以从格式字符串中检索"width"
- 从函数角度看ID到文件路径的内部与外部映射
- clang格式:宏的缩进
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 在glTexImage2D中,当我选择与在着色器中采样不同的内部格式时,情况如何?
- OpenGL:是否可能具有16位内部格式,类似于亮度 alpha
- 可能在着色器中找到纹理的内部格式