Я пытаюсь сравнить обычный тип bool (type_2d) в GLSL, чтобы вывести один из двух типов сэмплера - sampler2D и samplerCube.Это используется исключительно для различения кубической карты (скайбокс, отражающие данные кубической карты и т. Д.) И sampler2d (альбедо-карты, карты нормалей и т. Д.).
Я пробовал сравнивать с целым числом, с плавающей точкой, а также с логическим значениемОднако кадровый буфер всегда прибегает к черному экрану.
Принимая во внимание , результаты кубической карты будут работать отлично, если я жестко закодирую значение bool внутри "main", где, например, "type_2d = false" без равномерного присвоения, в отличиек разбору унифицированного значения из C ++.
Вот код "GBuffer.f":
#version 420 core
layout(location = 0) out vec3 gPosition; // Position texel colour
layout(location = 1) out vec3 gNormal; // Normal texel colour
layout(location = 2) out vec4 gAlbedo; // Albedo texel colour
in vec3 _texcoord;
in vec3 _normal;
in vec3 _frag_pos;
uniform bool type_2d;
uniform sampler2D albedo; // Albedo and specular map
uniform samplerCube cubemap; // Skybox cubemap
vec4 final_colour;
void main()
{
gPosition = _frag_pos;
gNormal = normalize(_normal);
if (type_2d)
{
final_colour.rgb = texture(albedo, _texcoord.st).rgb;
final_colour.a = texture(albedo, _texcoord.st).a; // Emission
}
else
{
final_colour.rgb = texture(cubemap, _texcoord).rgb;
final_colour.a = texture(cubemap, _texcoord).a;
}
gAlbedo.rgba = final_colour;
}
Почему сравнения единообразных bool никогда не работают в фрагментном шейдере?Мне даже удалось получить единообразное значение из GLSL, и этап синтаксического анализа, кажется, работает отлично - это почти как если бы GLSL отказывается использовать его для сравнения, и, таким образом, возвращает образец текстуры NULL, создавая эффект черного экрана,Есть идеи?