opengl - GLSL 直通几何着色器

标签 opengl glsl opentk

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

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

我错过了什么?

最佳答案

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

关于opengl - GLSL 直通几何着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46637687/

相关文章:

mono - 如何为 AndroidGameView 启用抗锯齿 (4X MSAA)?

opengl - 3D场景图遍历问题

opengl - 为什么我不能将 int 成员添加到我的 GLSL 着色器输入/输出 block ?

c++ - 为实体形状绘制带线边框的有效方法

opengl - 不支持 GL_ARB_sparse_texture

c# - 旋转绘图时的工件

c# - GLSL 110 不允许子矩阵或超矩阵构造函数

opengl - 纹素中心坐标处的textureGather()行为

python - PyOpenGL - 当某些场景元素需要消失时更新三角形数组

c++ - 读取原始 3D 纹理和切片立方体