如果几何着色器处于活动状态,如何将信息从顶点着色器传递到片段着色器?

真金

在添加几何着色器之前,我在顶点着色器中声明了一个变量:

out vec3 normal; 

被片段着色器接收为:

in vec3 normal; 

但是,如果我向程序添加几何着色器,链接器会告诉我 normal 尚未声明为前一阶段的输出。但我不确定如何在几何着色器中接收或发送输出。

疯兔76

顶点着色器的输出是几何着色器的输入,而几何着色器的输出是片段着色器的输入。
几何着色器的输入将是图元顶点数长度的数组。(请参阅几何着色器 - 输入)。

这意味着您必须在几何着色器中声明一个输入数组和一个输出:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过顶点着色器将数据从顶点着色器传递到片段着色器

OpenGL:如何将顶点位置从几何着色器传递到片段着色器?

如何在Metal中将数组从顶点着色器传递到片段着色器

顶点着色器与片段着色器

在glsl 3.3中将浮点数组从顶点着色器传递到片段着色器

如何将变量从“顶点”着色器移动到“几何”着色器?

片段着色器如何确定来自顶点着色器输出的片段数?

OpenGL无法将变量从顶点着色器发送到片段着色器

PyOpenGL将变量传递给顶点着色器

如何将一半传递给顶点着色器?

是否可以使用具有或不具有几何体着色器的相同顶点着色器和片段着色器?

在Threejs中使用顶点着色器旋转几何

如何在顶点着色器中将VBO数据用作位置数据,在片段着色器中如何将统一数据用作颜色数据

在顶点着色器与片段着色器中计算TBN矩阵?

了解来自顶点着色器的片段着色器输入

警告:片段着色器不会读取顶点着色器“ v_gradient”的输出

顶点着色器或片段着色器中的OpenGL ES2.0 Lighting

OpenGL顶点着色器处理

GLSL 变量未从顶点传递到片段着色器

GLSL从“片段着色器”到“顶点着色器”发送颜色数据似乎总是等于0

优化片段和顶点着色器之间的操作

OpenGL调试,如何查看顶点着色器的结果

顶点着色器的支持程度如何?

GPU如何处理顶点着色器?

如果片段着色器仅接收顶点输入,如何为每个像素运行片段着色器?

如何将纹理数据从Objective C客户端传递到此openGL顶点着色器?

如何将数组存储到纹理中并在顶点着色器中正确采样纹理?

通过顶点attrib指针将颜色坐标传递到顶点着色器中

WebGL:是否禁止在顶点着色器和片段着色器中绑定相同的制服?