将变量通过几何着色器从顶点着色器传递到片段着色器

时间:2021-03-29 02:58:07

标签: opengl glsl shader

一开始,我没有使用几何着色器,直接将数据从顶点着色器传输到片段着色器。

在我的顶点着色器中:

[...]
out vec2 TexCoords;
out vec3 Normal;
out vec3 FragPos;
out vec4 lightSpacePos[NUM_CASCADES]; // NUM_CASCADES is a constant with a value of 3
flat out int dirMapFlag; 
out mat3 TBN; 
out mat3 iTBN;
[...]

在我的片段着色器中:

[...]
in vec3 FragPos;
in vec3 Normal; 
in vec2 TexCoords; 
in vec4 lightSpacePos[NUM_CASCADES];
in mat3 TBN; 
in mat3 iTBN;
flat in int dirMapFlag; 
[...]

但是当我添加几何着色器并使用它将顶点着色器中的值传递给片段着色器时,什么都无法显示。

我的顶点着色器:

[...]
out vec2 TexCoords_G;
out vec3 Normal_G;
out vec3 FragPos_G;


out LightSpacePos_G{
    vec4[NUM_CASCADES] data;
};

flat out int dirMapFlag_G;
out mat3 TBN_G; 
out mat3 iTBN_G;
[...]

我的几何着色器:

#version 330 core

layout (points) in;
layout (points, max_vertices = 1) out;

#define NUM_CASCADES 3

in vec2 TexCoords_G[];
in vec3 Normal_G[];
in vec3 FragPos_G[];
in LightSpacePos_G{
    vec4[NUM_CASCADES] data;
}lightSpacePos_G[];
flat in int dirMapFlag_G[];
in mat3 TBN_G[]; 
in mat3 iTBN_G[];


out vec2 TexCoords;
out vec3 Normal;
out vec3 FragPos;
out vec4 lightSpacePos[NUM_CASCADES];
flat out int dirMapFlag; 
out mat3 TBN; 
out mat3 iTBN;


void main() {
    TexCoords = TexCoords_G[0];
    Normal = Normal_G[0];
    FragPos = FragPos_G[0];
    dirMapFlag = dirMapFlag_G[0];
    TBN = TBN_G[0];
    iTBN = iTBN_G[0];
    
    for(int i = 0; i < NUM_CASCADES; i ++) lightSpacePos[i] = (lightSpacePos_G[0]).data[i];
    
    gl_Position = gl_in[0].gl_Position;
    EmitVertex();
    EndPrimitive();
}

片段着色器未修改。

0 个答案:

没有答案