OpenGL usampler2d 值不能被分割
OpenGL usampler2d value cannot be divided
我一直在编写 GLSL 着色器,并使用整数纹理 (GL_RED) 在着色器中存储值。
当我尝试除以从 usampler2D 纹理中获取的值时,它保持不变。
以下是最小的可重现着色器。
#version 440
in vec2 uv;
out vec3 color;
layout (binding = 1) uniform usampler2D tm_data;
void main(){
float index = texture(tm_data, uv).r;
float divisor = 16.0f
color = vec3(index / divisor, 0, 0);
}
无论我尝试以何种方式划分或改变索引值,呈现的红色值始终为 1.0。
当采样器更改为标准化采样器 (sampler2D) 时,颜色操作会按预期工作
#version 440
in vec2 uv;
out vec3 color;
layout (binding = 1) uniform sampler2D tm_data; //Loads as normalized from [0,255] to [0,1]
void main(){
float index = texture(tm_data, uv).r * 255.0f; //Convert back to integer approximation
float divisor = 4.0f
color = vec3(index / divisor, 0, 0); //Shade of red now appears considerably darker
}
有谁知道为什么会发生这种意外行为?
tm_data 纹理加载为 GL_RED -> GL_RED
使用的OpenGL版本是4.4
没有使用框架(没有偷偷摸摸的添加),所有内容都是使用 gl 函数调用加载的。
为了使用 usampler2D
,内部格式必须是无符号整数格式(例如 GL_R8UI
)。参见 Sampler types。
如果内部格式是基本格式GL_RED
,那么采样器类型必须是sampler2D
.
请注意,sampler*
用于浮点格式,isampler*
用于有符号整数格式,usampler*
用于无符号整数格式。
参见 OpenGL Shading Language 4.60 Specification - 4.1.7. Opaque Types and OpenGL Shading Language 4.60 Specification - 8.9. Texture Functions
我一直在编写 GLSL 着色器,并使用整数纹理 (GL_RED) 在着色器中存储值。 当我尝试除以从 usampler2D 纹理中获取的值时,它保持不变。 以下是最小的可重现着色器。
#version 440
in vec2 uv;
out vec3 color;
layout (binding = 1) uniform usampler2D tm_data;
void main(){
float index = texture(tm_data, uv).r;
float divisor = 16.0f
color = vec3(index / divisor, 0, 0);
}
无论我尝试以何种方式划分或改变索引值,呈现的红色值始终为 1.0。
当采样器更改为标准化采样器 (sampler2D) 时,颜色操作会按预期工作
#version 440
in vec2 uv;
out vec3 color;
layout (binding = 1) uniform sampler2D tm_data; //Loads as normalized from [0,255] to [0,1]
void main(){
float index = texture(tm_data, uv).r * 255.0f; //Convert back to integer approximation
float divisor = 4.0f
color = vec3(index / divisor, 0, 0); //Shade of red now appears considerably darker
}
有谁知道为什么会发生这种意外行为?
tm_data 纹理加载为 GL_RED -> GL_RED 使用的OpenGL版本是4.4 没有使用框架(没有偷偷摸摸的添加),所有内容都是使用 gl 函数调用加载的。
为了使用 usampler2D
,内部格式必须是无符号整数格式(例如 GL_R8UI
)。参见 Sampler types。
如果内部格式是基本格式GL_RED
,那么采样器类型必须是sampler2D
.
请注意,sampler*
用于浮点格式,isampler*
用于有符号整数格式,usampler*
用于无符号整数格式。
参见 OpenGL Shading Language 4.60 Specification - 4.1.7. Opaque Types and OpenGL Shading Language 4.60 Specification - 8.9. Texture Functions