我的情况是当我通过GLSL处理来自RGBD相机的一些深度数据时。深度纹理的信息如下:
internal Format = GL_LUMINANCE16UI_EXT
Format = GL_LUMINANCE_INTEGER_EXT
DataType = GL_UNSIGNED_SHORT
我的顶点着色器为空:
#version 330
layout(location = 0) in vec4 in_position;
void main()
{
gl_Position = in_position;
}
My Fragment着色器
#version 330 core
in vec2 texcoord;
out uint FragColor;
uniform usampler2D gSampler;
void main()
{
.
.
.
FragColor = ...;
}
我的Geometry着色器是:
#version 330 core
layout(points) in;
layout(triangle_strip, max_vertices = 4) out;
out vec2 texcoord;
void main()
{
gl_Position = vec4(1.0, 1.0, 0.0, 1.0);
texcoord = vec2(1.0, 1.0);
EmitVertex();
gl_Position = vec4(-1.0, 1.0, 0.0, 1.0);
texcoord = vec2(0.0, 1.0);
EmitVertex();
gl_Position = vec4(1.0,-1.0, 0.0, 1.0);
texcoord = vec2(1.0, 0.0);
EmitVertex();
gl_Position = vec4(-1.0,-1.0, 0.0, 1.0);
texcoord = vec2(0.0, 0.0);
EmitVertex();
EndPrimitive();
}
此代码适用于我的 NVIDIA ,但 Intel 驱动程序(Intel 5th Gen)。因此,我将深度纹理更改为格式如下:
internal Format = GL_DEPTH_COMPONENT16
Format = GL_DEPTH_COMPONENT
DataType = GL_UNSIGNED_SHORT
当我使用glerror和glGetShaderInfoLog检查时,它可以在没有任何错误日志的情况下工作,但仅从着色器返回零。由于新的纹理格式,我是否必须在着色器中更改某些内容?