頂点シェーダーからフラグメント シェーダーに変数を渡す際に問題が発生したことはありません。しかし、今日、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 は変数が書き込まれていないと言っていますが、書き込み時に変更を認識し、それらの変更を表示します。
それで、それは単なる誤った警告またはバグですか?そうではないと教えてくれますが、値は正しく渡されているようです。この警告が表示されるのはなぜですか?