У меня проблемы с загрузкой небольшого вектора vec4
s в графический процессор. Я свел эту проблему к минимуму кода, чтобы выдать ошибку.
Вот мой фрагментный шейдер:
precision mediump float;
uniform vec4 test[5];
void main() {
gl_FragColor = test[0]+test[1]+test[2]+test[3]+test[4];
}
А вершинный шейдер тривиален:
attribute vec4 vPosition;
void main(){
gl_Position = vPosition;
}
Вот код, который пытается загрузить вектор vec4
:
float[] testBuffer = new float[4*5];
// Fill with 1/5s for now
Arrays.fill(testBuffer, 0.2f);
// Get the location
int testLoc = GLES20.glGetUniformLocation(mProgram, "test");
checkGlError("glGetUniformLocation test");
// Upload the buffer
GLES20.glUniform4fv(testLoc, 5, testBuffer, 0);
checkGlError("glUniform4fv testBuffer");
Ошибка обнаружена при втором вызове checkGlError()
, код ошибки - GL_INVALID_OPERATION.
Я прочитал документацию на glUniform , и все размеры и типы выглядят правильно. testLoc
является допустимым дескриптором местоположения, и у меня нет ошибок при загрузке фрагмента и кода вершинного шейдера.
Я просто не вижу, что я делаю неправильно! Есть идеи?
- ОБНОВЛЕНО