【问题标题】:GLSL Passthrough Geometry ShaderGLSL 直通几何着色器
【发布时间】:2018-06-30 05:37:42
【问题描述】:

我已经学习 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);
}

它应该在窗口的右下角绘制一个白色方块,并且没有几何着色器,它确实如此,这是我所期望的。使用几何着色器,它什么也不渲染。信息日志显示一切编译和链接正常。

我错过了什么?

【问题讨论】:

  • 看不到任何明显的错误,但是您检查着色器编译和链接错误了吗?
  • 是的,我在每次编译后和链接后检查过;没有错误。
  • 是的,就是这样。奇怪,我以为我试过了……

标签: opengl glsl opentk


【解决方案1】:

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

【讨论】:

  • 是的,成功了。为什么编译/链接信息日志中没有显示该错误?
  • 如果没有提供,必须有一些默认值。它很奇怪,但我认为它应该抛出一些错误你能在编译着色器的地方分享代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 2011-09-25
相关资源
最近更新 更多