У меня никогда не было проблем с передачей переменных из вершинного шейдера в фрагментный шейдер. Но сегодня я добавил новую переменную "out" в vs и соответствующую переменную "in" в fs. 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;
Интересно, что все другие варианты, такие как "уф" и все, работают. Они объявлены одинаково.
Также интересно: даже если GLSL говорит, что переменная не записана - она все равно распознает изменения, когда я пишу в нее, и отображает эти изменения.
Так это просто ложное предупреждение или ошибка? Хотя это говорит мне об обратном, значение, кажется, передается правильно. Почему я получаю это предупреждение?