0

頂点シェーダーからフラグメント シェーダーに変数を渡す際に問題が発生したことはありません。しかし、今日、vs に新しい「out」変数を追加し、fs に対応する「in」変数を追加しました。GLSL は次のように述べています。

シェーダー プログラム: フラグメント シェーダーはさまざまな tbn を使用しますが、以前のシェーダーはそれに書き込みません。

確認のために、VSの関連部分を次に示します。

#version 330 core

layout(location = 0) in vec4 position;
layout(location = 1) in vec2 uv;

// plus other layout & uniform inputs here

out DATA
{
    vec2 uv;
    vec3 tangentViewDir;
    mat3 tbn;
} vs_out;

void main()
{
    vs_out.uv       = uv;
    vs_out.tangentViewDir = vec3(1.0);
    vs_out.tbn = mat3(1.0);

    gl_Position     = sys_ProjectionViewMatrix * sys_ModelMatrix * position;
}

そしてFSでは、次のように宣言されています。

in DATA
{
    vec2 uv;
    vec3 tangentViewDir;
    mat3 tbn;
} fs_in;

興味深いことに、「uv」などの他の変数はすべて機能します。それらは同じ方法で宣言されます。

また興味深い: GLSL は変数が書き込まれていないと言っていますが、書き込み時に変更を認識し、それらの変更を表示します。

それで、それは単なる誤った警告またはバグですか?そうではないと教えてくれますが、値は正しく渡されているようです。この警告が表示されるのはなぜですか?

4

1 に答える 1