GLSL 通过几何着色器传递

3

我已经学习了大约一个月的OpenGL(实际上是OpenTK),并开始尝试使用几何着色器。我最初编写了一个更复杂的着色器,但它没有起作用,所以我将一切都简化为一个简单的传递着色器,但它仍然不起作用。

顶点着色器:

#version 420 core

layout (location = 0) in vec3 position;

uniform mat4 transform;

void main()
{
    gl_Position = transform * vec4(position, 1);
}

几何着色器:


#version 420 core

layout (triangles) in;
layout (triangle_strip) out;

void main()
{
    int i;
    for(i = 0; i < gl_in.length(); i++)
    {
        gl_Position = gl_in[i].gl_Position;

        EmitVertex();
    }

    EndPrimitive();
}

片段着色器:

#version 420 core

layout (binding = 0) uniform sampler2D diffuse;

layout(location = 0) out vec4 color;

void main()
{
    color = vec4(1, 1, 1, 1);
}

它应该在窗口的右下角绘制一个白色正方形。没有几何着色器,它能够实现这一点,这是我所期望的。但是使用几何着色器,它什么都不渲染。信息日志显示所有内容都被正确地编译和链接。
我漏掉了什么?

2
你看不到明显的错误,但是你检查了着色器编译和链接错误吗? - Rabbid76
是的,我在每次编译和链接后都进行了检查,没有错误。 - Andrew Tofelt
没错,就是这样。奇怪,我以为我试过了... - Andrew Tofelt
1个回答

2

输出必须有一个max_vertices声明。该数字必须是编译时常量,并定义了单个GS调用将写入的顶点的最大数量。它不能超过MAX_GEOMETRY_OUTPUT_VERTICES的实现定义限制。


好的,这样就行了。为什么编译/链接信息日志中没有显示出错误呢? - Andrew Tofelt
如果没有提供默认值,那么这里必须有一些默认值。虽然很奇怪,但我认为它应该会抛出一些错误。你能分享一下编译着色器的代码吗? - Paritosh Kulkarni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接