Когда я пытаюсь передать единый uint фрагментному шейдеру из вершинного шейдера, он меняет значение. Я подтвердил, что значение 1 в вершинном шейдере, изменив положение, если значение не равно 1. Если значение 1 во фрагментном шейдере, вместо диффузного цвета отображается диффузная текстура. Код выглядит следующим образом. Кроме того, я пытался передать его как значение в едином vec2, но это тоже не сработало.
Вершинный шейдер:
#version 410
// Layouts
layout(location = 0) in vec3 position;
layout(location = 1) in vec2 texCoord;
// Uniforms (matrices)
uniform mat4 model, view, proj;
// Uniforms (texture)
uniform uint useDiffuseTexture;
// Uniforms (shininess)
uniform float shininess;
uniform float shininessStrength;
// Uniforms (colour)
uniform vec3 diffuseColour;
uniform vec3 specularColour;
// Outputs (texture)
out uint UseDiffuseTexture;
out vec2 TexCoord;
// Outputs (colour)
out vec3 DiffuseColour;
out vec3 SpecularColour;
// Outputs (shininess)
out float Shininess;
out float ShininessStrength;
void main() {
UseDiffuseTexture = useDiffuseTexture;
TexCoord = texCoord;
if(useDiffuseTexture == 1)
gl_Position = proj * view * model * vec4(position, 1.0);
else
gl_Position = vec4(position, 1.0);
}
Фрагментный шейдер:
#version 410
// Inputs (texture)
in vec2 TexCoord;
uniform sampler2D diffuseTexture;
// Uniforms (texture)
uniform uint UseDiffuseTexture;
// Uniforms (colour)
uniform vec3 DiffuseColour;
uniform vec3 SpecularColour;
// Uniforms (shininess)
uniform float Shininess;
uniform float ShininessStrength;
// Output
out vec4 fragColour;
void main() {
vec4 texColour = vec4(DiffuseColour, 1.0);;
if(UseDiffuseTexture == 1)
texColour = texture(diffuseTexture, TexCoord);
if(texColour.a < 0.2)
discard;
fragColour = texColour;
}