Я рендеринг текстурированных квадратов (в пространстве экрана), и я хочу указать текстуру в данных вершины, отправить как плоский вывод в шейдер фрагмента, и использовать для выбора текстуры. Значение изменяется во время этого процесса. В RenderDo c вход VS равен 2, а вывод - 1073741824 (для каждой вершины). Кто-нибудь есть идеи, почему? (Основной контекст 4.6, шейдеры #version 460). Я загружаю 6 вершин на каждый квад и использую glDrawArrays (). Этап текстуры 0 работает, но любое ненулевое значение преобразуется.
layout(location=0) in vec3 coord3d;
layout(location=1) in vec2 uvIn;
layout(location=2) in vec3 colorIn;
layout(location=3) in unsigned int textureStageIn;
out vec4 color;
out vec2 uv;
flat out unsigned int textureStage;
void main(void)
{
gl_Position = vec4( coord3d, 1.0 );
color = vec4(colorIn,1.0);
uv = uvIn;
textureStage = textureStageIn;
}
in vec4 color;
in vec2 uv;
flat in unsigned int textureStage;
uniform sampler2D tex00;
uniform sampler2D tex01;
uniform sampler2D tex02;
out vec4 outpColor;
void main(void)
{
vec2 uvDx = dFdx(uv);
vec2 uvDy = dFdy(uv);
switch ( textureStage )
{
case 0:
outpColor = textureGrad(tex00, uv, uvDx, uvDy );
break;
case 1:
outpColor = textureGrad(tex01, uv, uvDx, uvDy );
break;
case 2:
outpColor = textureGrad(tex02, uv, uvDx, uvDy );
break;
default:
outpColor = color;
break;
}
}