Привет, все мои шейдеры и компилируются, и связываются правильно … они работали раньше, и я некоторое время работал над своей программой, совсем не касаясь шейдера vert / frag, и теперь glGetUniformLocation возвращает огромные числа при попытке определить их местоположение.
Я использую это на этих трех переменных:
m_sw = glGetUniformLocation(m_program, "m_sw" );
m_sh = glGetUniformLocation(m_program, "m_sh" );
m_grabLoc = glGetUniformLocation(m_program, "grabTexture");
m_sw получает значение 21692416
m_sh получает значение 21757952
m_grabLoc получает значение 21626880
все три переменные имеют тип GLint, возвращаемый glGetUniformLocation.
Обратите внимание: я также использую его на униформе, которой нет, и она правильно возвращает -1, так что я в замешательстве!
Мой вершинный шейдер выглядит следующим образом
#version 120
varying vec2 texCoord;
void main(void)
{
gl_Position = ftransform();
texCoord = gl_MultiTexCoord0.xy;
}
Мой фрагментный шейдер выглядит следующим образом
#version 120
uniform sampler2D grabTexture;
uniform float m_sh;
uniform float m_sw;
varying vec2 texCoord;
void main(void)
{
vec4 col = texture2D (grabTexture, texCoord.st);
//left
col += texture2D (grabTexture, vec2(texCoord.s-m_sw,texCoord.t));
//right
col += texture2D (grabTexture, vec2(texCoord.s+m_sw,texCoord.t));
//below
col += texture2D (grabTexture, vec2(texCoord.s,texCoord.t-m_sh));
//top
col += texture2D (grabTexture, vec2(texCoord.s,texCoord.t+m_sh));
//the corners of the pixels
col += texture2D (grabTexture, vec2(texCoord.s+m_sw,texCoord.t+m_sh));
col += texture2D (grabTexture, vec2(texCoord.s-m_sw,texCoord.t+m_sh));
col += texture2D (grabTexture, vec2(texCoord.s+m_sw,texCoord.t-m_sh));
col += texture2D (grabTexture, vec2(texCoord.s-m_sw,texCoord.t-m_sh));
gl_FragColor = col * 0.111111f;
}
это полноэкранный анти-псевдоним между прочим.
Просто интересно, если кто-то еще имел эту проблему или знает решение?
РЕДАКТИРОВАТЬ: Я думаю, что стоит увеличить, если я изменю gl_FragColor на
gl_FragColour = vec4 (1.0,0.0,0.0,0.0)
если действительно заставляет экран читать (как и ожидалось), значит, шейдер определенно работает! 🙁
Задача ещё не решена.
Других решений пока нет …