如何在GLSL中使用RGBA16
How to use RGBA16 in GLSL?
我试图在GLSL中绘制一些深度图,我需要至少一个10位通道。我决定使用GL_R16或GL_RGBA12 -他们是最近的一个,GL_R16将花费更少的gpu内存(因为它会…对吧?)。
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA12, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
问题来了:如何使GLSL正确使用它?Sampler2D将其转换为经典的8位RGBA…夹紧怎么办?在GLSL中,每个组件颜色都归一化为[0,1]-对于16位来说是一样的吗?我只是想知道如何使用它。
Sampler2D转换成经典的8位RGBA…
不,没有。sampler2d
不知道或不关心格式(除非它是整数格式,在这种情况下您会得到未定义的行为)。它将其转换为float;仅此而已。
夹紧怎么办?
箝位是无关的,因为GL_RGBA16是无符号规范化的格式。[0,65535]范围内的整数值被转换为[0,1],就像GL_RGBA8将[0,255]转换为[0,1]一样。这不是"夹紧";这是你的格式要求OpenGL做的事情。更高精度的格式只提供更好的精度;他们不提供更大的数字。
如果你想实际得到16位整数作为整数,那么你需要使用一种实际存储整数的格式。GL_RGBA16UI存储16位无符号整数。当然,这需要OpneGL 3。x +硬件。你必须使用usampler2d
相关文章:
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- Opengl 3.1 GLSL 140 在 C++ 年输出白色在片段着色器中
- 在不使用统一的情况下将纹理传递给 GLSL 着色器?
- 在细胞中产生噪声 - CPP 和 GLSL
- 这个SSDO演示的GLSL版本要求是自我冲突的吗
- 在 Ubuntu 18.04 上编译 GLSL 着色器时"不支持 GLSL 3.30"?
- GLSL 将 uint 转换为浮点颜色
- imageLoad glsl 在计算着色器 OpenGL 4.3 中始终返回 0
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 接收"Error compiling: 0:1(1): error: syntax error, unexpected $end" C++、GLSL、着色器文件
- GLSL 统一 ivec 未设置,并且在询问时具有默认(错误)值
- 如何在编译器C++不智能的情况下实现 GLSL vec* 构造语法?
- GLSL C++ glVertexAttribPointer & glDrawElements return GL_INVALID_OPERATION
- 在 glsl 中初始化全局变量?
- C++ 在 Vulkan 中发送到 GLSL 的可变长度数组的语法
- 更正GLSL无绑定纹理句柄中的结构布局
- Shaderc在android上调用glsl到spv程序集时崩溃
- 不支持 GLSL 330 内核
- GLSL 将颜色数据从片段着色器发送到顶点着色器似乎总是等于 0
- 如何在GLSL中使用RGBA16