Mik*_*sen 3 opengl glsl geometry-shader
我在为点编写简单的传递几何着色器时遇到了一些问题。我想它应该是这样的:
#version 330
precision highp float;
layout (points) in;
layout (points) out;
void main(void)
{
gl_Position = gl_in[0].gl_Position;
EmitVertex();
EndPrimitive();
}
Run Code Online (Sandbox Code Playgroud)
当我没有指定几何着色器时,我在屏幕上显示了一堆点,但是当我尝试将此着色器链接到我的着色器程序时,没有显示任何点,也没有报告错误。
我正在使用 C# 和 OpenTK,但我认为这不是问题所在。
编辑:人们要求使用其他着色器,尽管我确实在不使用几何着色器的情况下测试了这些着色器,并且在没有几何着色器的情况下它们也能正常工作。
顶点着色器:
void main()
{
gl_FrontColor = gl_Color;
gl_Position = ftransform();
}
Run Code Online (Sandbox Code Playgroud)
片段着色器:
void main()
{
gl_FragColor = gl_Color;
}
Run Code Online (Sandbox Code Playgroud)
我不确定(没有几何着色器的实际经验),但您不必指定最大输出顶点数。在你的情况下它只是一个,所以试试
layout (points, max_vertices=1) out;
Run Code Online (Sandbox Code Playgroud)
也许着色器编译成功,因为您仍然可以通过 API 指定顶点数(至少在兼容性方面,我认为)。
编辑:您使用内置变量gl_FrontColor(并gl_Color在片段着色器中读取),但是在几何着色器中,您不会将其传播到片段着色器(它不会自动传播)。
这给我们带来了另一个问题。您将新语法(如gl_in)与旧的已弃用语法(如ftransform和内置颜色变化)混合在一起。也许这不是一个好主意,在这种情况下,您遇到了问题,如果我没记错的话,gl_in没有gl_Color或没有gl_FrontColor成员。所以最好的办法是使用你自己的颜色变量作为out顶点和几何着色器的in变量以及几何和片段着色器的变量(但请记住,in必须是几何着色器中的数组)。
| 归档时间: |
|
| 查看次数: |
3432 次 |
| 最近记录: |