点的直通几何着色器

问题描述

| 在为点编写简单的传递式几何着色器时遇到一些问题。我认为应该是这样的:
#version 330
precision highp float;

layout (points) in;
layout (points) out;

void main(void)
{
    gl_Position = gl_in[0].gl_Position;
    EmitVertex();
    EndPrimitive();
}
当我未指定几何着色器时,我在屏幕上显示了一堆点,但是当我尝试将此着色器链接到我的着色器程序时,没有显示点,也没有错误报告。 我正在使用C#和OpenTK,但我不认为这是问题所在。 编辑:人们要求使用其他着色器,尽管我确实在不使用几何着色器的情况下测试了这些着色器,并且在没有几何着色器的情况下也可以正常工作。 顶点着色器:
void main()
{
    gl_FrontColor = gl_Color;
    gl_Position = ftransform();
}
片段着色器:
void main()
{
    gl_FragColor = gl_Color;
}
    

解决方法

        我不确定(几何着色器没有实际经验),但是不必指定最大输出顶点数。就您而言,只是一个,所以尝试
layout (points,max_vertices=1) out;
着色器可能编译成功,因为您仍然可以通过API指定顶点数(我认为至少是在兼容性方面)。 编辑:您使用内置的变化
gl_FrontColor
(并在片段着色器中读取
gl_Color
),但是随后在几何体着色器中您不会将其传播到片段着色器(它不会自动传播)。 这给我们带来了另一个问题。您将新语法(例如
gl_in
)与旧的不赞成使用的语法(例如like7ѭ和内置的颜色变化)混合在一起。也许这不是一个好主意,在这种情况下,您会遇到问题,因为如果我没记错的话,
gl_in
没有
gl_Color
gl_FrontColor
成员。因此最好的办法是将自己的颜色变量用作顶点和几何着色器的
out
变量以及几何和片段着色器的
in
变量(但请记住,
in
必须是几何着色器中的数组)。