gpt4 book ai didi

opengl - GLSL 1.5 简单几何着色器

转载 作者:行者123 更新时间:2023-12-04 14:49:45 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的几何着色器,它在尝试修改内容之前仅通过顶点。

我的顶点着色器是

#version 150 core
in vec3 inPosition;
in vec4 inColor;

out vec4 vertexColor;

void main() {
vertexColor = inColor;
gl_Position = vec4(inPosition, 1.0);
}

我的几何着色器是
#version 150 core
layout (triangles) in;
layout (triangle_strip, max_vertices=3) out;

void main() {
gl_Position = gl_in[0].gl_Position;
EmitVertex();

gl_Position = gl_in[1].gl_Position;
EmitVertex();

gl_Position = gl_in[2].gl_Position;
EmitVertex();
EndPrimitive();
}

我的片段着色器是
#version 150 core
in vec4 vertexColor;
out vec4 fragColor;

void main() {
fragColor = vertexColor;
}

如果没有链接几何着色器,一切正常。但是,当我在几何着色器中链接时,它停止工作。我错过了什么?我的几何着色器是否需要输入 vertexColor从我的顶点着色器,如果是这样是怎么做的?

最佳答案

My geometry shader is exactly the same as the one listed on that page



是的,但您的免费顶点和片段着色器不是。

信息流经 OpenGL 管道如下:首先,顶点着色器获取东西。如果存在,它将其输出传递给几何着色器。几何着色器将其输出传递给片段着色器(当然,在习惯的三角形光栅化之后)。片段着色器将其输出传递到混合阶段。

你的顶点着色器有两个输出: gl_Position , 和 vertexColor .但是,您的几何着色器只接受一个输入: gl_in[0].gl_Position .这在 GLSL 中是不合法的:如果一个阶段输出一个值,下一个阶段必须输入它。唯一的异常(exception)是 GLSL 定义的值,如 gl_Position ,由光栅化器消耗。

如果您希望数据是直通的,您的直通 GS 需要实际通过数据。您需要在 GS 中正确输入:
in vec4 vertexColor[];

但是,GLSL 中的全局变量不能命名相同。所以你不能带 vertexColor作为输入和输出。因此,您必须更改输出的名称(或使用 interface blocks ):
out vec4 gsColor;

您的片段着色器现在必须采用 in vec4 gsColor;并与之合作。

当您尝试链接这些着色器时,您的编译器应该为您提供适当的信息日志,解释不匹配。当您的着色器无法链接时,您是否正在获取信息日志?如果没有,你应该。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com