GLSL仅适用于GL_DEPTH_COMPONENT纹理格式的深度

时间:2016-09-01 06:54:47

标签: opengl glsl shader intel

我的情况是当我通过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检查时,它可以在没有任何错误日志的情况下工作,但仅从着色器返回零。由于新的纹理格式,我是否必须在着色器中更改某些内容?

0 个答案:

没有答案