2017-08-09 12 views
0

私は私のプログラムに3つのシェーダを持っています。ジオメトリシェーダをフラグメントシェーダに渡して色を渡す必要がありますか?

頂点:

#version 330 core 
in vec2 Inpoint; 
in vec2 texCoords; 

out vec2 TexCoords; 

uniform mat4 model; 
uniform mat4 projection; 

void main() 
{ 
    TexCoords = texCoords; 
    gl_Position = projection * model * vec4(Inpoint, 0.0, 1.0); 
} 

ジオメトリ:

#version 330 core 

layout(triangles) in; 
layout(triangle_strip, max_vertices = 4) out; 

void main() 
{ 
    int i; 

    for (i = 0; i < gl_in.length(); i++) 
    { 
     gl_Position = gl_in[i].gl_Position; 
     EmitVertex(); 
    } 
    EndPrimitive(); 
} 

そして最後に、フラグメントシェーダ:ジオメトリシェーダのない今

#version 330 core 
in vec2 TexCoords; 
out vec4 color; 

uniform sampler2D image; 
uniform vec3 spriteColor; 

void main() 
{  
    color = vec4(spriteColor, 1.0) * texture(image, TexCoords); 
} 

、すべてがうまく表示されます。しかし、ジオメトリシェーダーを追加するとすぐに、すべてが悪くなります。

テクスチャのコードが得られないように動作します。

ジオメトリシェーダは、データをフラグメントシェーダに渡す必要がありますか?私はジオメトリシェーダが基本的に何もしていないので、そうしてはならないことを意味します。巨大な間違いがない限り、私は行方不明です。

私はパスを追加しようとしましたが、すべてが配列でなければならないと訴えています。配列しても正しく動作しませんでした。

答えて

4

GLSL 3.30 specs 4.3.1 Inputsを引用:

フラグメントシェーダ入力ごとのフラグメントの値、典型的には、ジオメトリシェーダを有する前段の出力

から 補間取得する前段階です。そう、はい、あなたのFSはあなたのGSからの入力を使用し、それからのみです。

関連する問題