gpt4 book ai didi

c++ - glsl 错误 : "v_color" not declared as an output from the previous stage while trying to render wtih tesselation shaders

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:27 26 4
gpt4 key购买 nike

我希望我的渲染器能够使用曲面 segmentation 着色器,但是在运行时,调试器说

%s
Link info
---------
error: "v_color" not declared as an output from the previous stage

我不知道它到底是什么意思。

v_color 是 vec4 中的片段着色器,它来自顶点着色器,顶点着色器从 vbo 中获取这个值,如下所示:

#version 420 core                                                 

layout (location = 1) in vec4 a_color
out vec4 v_color;
void main(void)
{
gl_Position = //something;
v_color = a_color;
}

#version 420 core                                                  

out vec4 color;
in vec4 v_color;

void main(void)
{
color = v_color;
}

顶点着色器从顶点属性指针获取 a_color。

为什么返回错误?

最佳答案

每个着色器阶段将输出传递到下一阶段的输入。顶点着色器之后是曲面 segmentation 控制着色器,接着是曲面 segmentation 评估着色器,最后是片段着色器(如果没有几何着色器)。

如果你有一个曲面 segmentation 着色器并且你想将一个属性从顶点着色器传递到片段着色器,那么你必须通过所有着色器阶段传递该属性:

例如:

Vertex shader :

#version 420 core                                                 

layout (location = 1) in vec4 a_color
out vec4 v_color;

void main(void)
{
v_color = a_color;

// .....
}

Tessellation control shader :

#version 420 core    

layout(vertices=3) out;

in vec4 v_color[];
out vec4 tc_color[];

void main()
{
tc_color[gl_InvocationID] = v_color[gl_InvocationID];

// .....
}

Tessellation evaluation shader :

#version 420 core 

layout(triangles) in;

in vec4 tc_color[];
out vec4 te_color;

void main()
{
te_color = tc_color[0] * gl_TessCoord.x +
tc_color[1] * gl_TessCoord.y +
tc_color[2] * gl_TessCoord.z;

// .....
}

Fragment shader :

#version 420 core                                                  

in vec4 te_color;
out vec4 color;

void main(void)
{
color = te_color;
}

关于c++ - glsl 错误 : "v_color" not declared as an output from the previous stage while trying to render wtih tesselation shaders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53565413/

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