LINUX.ORG.RU

Ошибка при присваивании значения в uniform

 ,


0

1

есть шейдеры

// vertex
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;

void main(void) {
    gl_Position = a_position;
    v_texCoord = a_texCoord;
}
// fragment
varying vec2 v_texCoord;
uniform sampler2D u_texture;
uniform int winRad;
uniform float ml;
uniform float width;
void main()
{
	vec4 tc = texture2D(u_texture, v_texCoord);
	for (int i=1; i<winRad; i++)
	{
		float shift = float(i) / width;
		tc += texture2D(u_texture, v_texCoord + vec2(shift,0.0));
		tc += texture2D(u_texture, v_texCoord - vec2(shift,0.0));
	}
	tc = tc * ml;
	gl_FragColor = tc;
}
Оно нормально инициализируется, glGetUniformLocation возвращает не нуль, но если пытаюсь писать в какую-нибудь униформу
например
glUniform1i(glGetUniformLocation(prg,"u_texture"), 0);
gl генерирует ошибку 502

★★★★★

Оно нормально инициализируется, glGetUniformLocation возвращает не нуль

Ноль это валидное значение, нужно на -1 проверять. Я глазами пробежался, вроде ничего необычного не увидел. Разве что в старом glsl нет интов (я уже не помню просто, мб и есть).

А вообще стоит читать маны/спеку в таких случаях. Код 0x502 == GL_INVALID_OPERATION

http://www.opengl.org/sdk/docs/man/xhtml/glGetUniformLocation.xml

GL_INVALID_OPERATION is generated if program is not a program object.
GL_INVALID_OPERATION is generated if program has not been successfully linked.

Так что скорее всего шейдер не скомпилировался или линковка зафейлилась. Выводи логи компиляции на консоль и смотри че не так.

oh-la-la
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.