Opengl 顶点着色器->;几何体着色器,错误“;获取非活动制服的位置“;

Opengl 顶点着色器->;几何体着色器,错误“;获取非活动制服的位置“;,opengl,glsl,vertex-shader,geometry-shader,Opengl,Glsl,Vertex Shader,Geometry Shader,我有如下设置 顶点着色器(…用于不相关的内容): 几何体着色器(…用于不相关的内容): 但是,当我尝试运行着色器时,它看起来好像没有使用ModelViewMatrix(在尝试设置它时,我得到了“获取非活动统一的位置”),甚至认为我正在使用它来计算几何体着色器中的gl_位置。有什么好处 据我所知,这里的几何体着色器接收2个顶点,输出4个顶点,以便片段着色器使用,我是否正确理解和使用几何体着色器?好,我解决了我的问题 我使用了错误的着色器,它与我尝试使用的着色器具有相同的vertice着色器,因此一

我有如下设置

顶点着色器(…用于不相关的内容):

几何体着色器(…用于不相关的内容):

但是,当我尝试运行着色器时,它看起来好像没有使用ModelViewMatrix(在尝试设置它时,我得到了“获取非活动统一的位置”),甚至认为我正在使用它来计算几何体着色器中的gl_位置。有什么好处


据我所知,这里的几何体着色器接收2个顶点,输出4个顶点,以便片段着色器使用,我是否正确理解和使用几何体着色器?

好,我解决了我的问题

我使用了错误的着色器,它与我尝试使用的着色器具有相同的vertice着色器,因此一些制服有效,而其他制服无效,我感到困惑

#version 330 core

uniform mat4 ModelViewMatrix;
...

in vec4 position;
...

out vec4 out_position;

...

void main()
{
    ...
    out_position = ModelViewMatrix * position;
    ...
}
#version 330 core

...

uniform mat4 ProjectionMatrix;

...

layout(lines) in;
layout(triangle_strip, max_vertices = 4) out;

in vec4 out_position[];

...

void main()
{
    vec4 lineDirection = out_position[1] - out_position[0];
    vec4 scaledLineWidthDir = ...;

    ...

    gl_Position = ProjectionMatrix * (lineDirection - scaledLineWidthDir);
    EmitVertex();

    gl_Position = ProjectionMatrix * (lineDirection + scaledLineWidthDir);
    EmitVertex();

    gl_Position = ProjectionMatrix * (-lineDirection + scaledLineWidthDir);
    EmitVertex();

    gl_Position = ProjectionMatrix * (-lineDirection - scaledLineWidthDir);
    EmitVertex();

    EndPrimitive();
}