Я пытаюсь присвоить единицу текстуры 0 униформе sampler2D
, но значение униформы не меняется.
Моя программа раскрашивает точки в зависимости от их высоты (координаты Y). Их цвет выглядит в текстуре.
Вот мой код вершинного шейдера:
#version 330 core
#define ELEVATION_MODE
layout (location = 0) in vec3 position;
layout (location = 1) in float intensity;
uniform mat4 vpMat;
flat out vec4 f_color;
#ifdef ELEVATION_MODE
uniform sampler2D elevationTex;
#endif
#ifdef INTENSITY_MODE
uniform sampler2D intensityTex;
#endif
// texCoords is the result of calculations done on vertex coords, I removed the calculation for clarity
vec4 elevationColor() {
return vec4(textureLod(elevationTex, elevationTexCoords, 0), 1.0);
}
vec4 intensityColor() {
return vec4(textureLod(elevationTex, intensityTexCoords, 0), 1.0);
}
int main() {
gl_Position = vpMat * vec4(position.xyz, 1.0);
#ifdef ELEVATION_MODE
f_color = elevationColor();
#endif
#ifdef COLOR_LODDEPTH
f_color = getNodeDepthColor();
#endif
}
Вот мой фрагментный шейдер:
#version 330 core
out vec4 color;
flat in vec4 f_color;
void main() {
color = f_color;
}
Когда этот шейдер выполняется, у меня связаны 2 текстуры:
- Высота текстуры в текстурном блоке 0
- Интенсивность текстуры в текстурном блоке 1
Я использую glUniform1i
для установки значения униформы:
glUniform1i(elevationTexLocation, (GLuint)0);
Но когда я запускаю свою программу, значение униформы elevationTex
равно 1
вместо 0
.
Если я удалю вызов glUniform1i
, унифицированное значение не изменится (по-прежнему 1), поэтому я думаю, что вызов ничего не делает (но не генерирует ошибку).
Если я изменю тип униформы на float
и вызов с glUniform1i
на:
glUniform1f(elevationYexLocation, 15.0f);
Значение в униформе теперь 15.0f
. Так что в моей программе нет проблем с местоположением, из которого я называю glUniform1i
, просто это не влияет на значение униформы.
Есть идеи о том, что я могу делать неправильно?
Я мог бы дать вам больше кода, но он не совсем доступен, так что если вы знаете ответ без него, это здорово. Если вам нужна часть кода на C ++, спросите, я постараюсь получить важные части