在添加几何着色器之前,我在顶点着色器中声明了一个变量:
out vec3 normal;
被片段着色器接收为:
in vec3 normal;
但是,如果我向程序添加几何着色器,链接器会告诉我 normal 尚未声明为前一阶段的输出。但我不确定如何在几何着色器中接收或发送输出。
顶点着色器的输出是几何着色器的输入,而几何着色器的输出是片段着色器的输入。
几何着色器的输入将是图元顶点数长度的数组。(请参阅几何着色器 - 输入)。
这意味着您必须在几何着色器中声明一个输入数组和一个输出:
in vec3 normal[];
out vec3 geo_normal;
将输入传递给输出:
geo_normal = normal[i];
EmitVertex();
在片段着色器中声明一个输入:
in vec3 geo_normal;
几何着色器:
in vec3 normal[]; // <---- array
out layout(location=1) vec3 geo_normal;
geo_normal = normal[i];
EmitVertex();
片段着色器:
in layout(location=1) vec3 normal; // link by layout location 1 and not by name
顶点着色器:
out TData
{
vec3 normal;
} outData;
outData.normal = .....;
几何着色器:
in TData
{
vec3 normal;
} inData[]; // <---- array
out TData
{
vec3 normal;
} outData;
outData.normal = inData.normal[i];
EmitVertex();
片段着色器:
in TData
{
vec3 normal;
} inData;
..... = inData.normal;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句