В моем фрагментном шейдере я объявляю массив текстур следующим образом: uniform sampler2D textures[7];
.
Этот массив загружается с индексами текстуры Open GL, с которыми я хочу использовать: GLES31.glUniform1iv(handleOnTextures, 7,new int [] {0,1,2,3,4,5,6);
как я хочу использовать от GL_TEXTURE0
до GL_TEXTURE6
.
В моей функции onSurfaceCreated
я загружаю текстуры следующим образом:
handleOnTextureNames= new int[textureArray.length];
GLES31.glGenTextures(textureArray.length, handleOnTextureNames, 0);
if (handleOnTextureNames[0] != 0) {
options = new BitmapFactory.Options();
options.inScaled = false;
for (t = 0; t < textureArray.length; t++) {
GLES31.glActiveTexture(GLES31.GL_TEXTURE0+t);
GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, handleOnTextureNames[t]);
image = BitmapFactory.decodeResource(getContext().getResources(), textureArray[t], options);
GLUtils.texImage2D(GLES31.GL_TEXTURE_2D, 0, image, 0);
image.recycle();
}
} else {
throw new RuntimeException("Error!");
}
GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MIN_FILTER, GLES31.GL_NEAREST);
GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MAG_FILTER, GLES31.GL_NEAREST);
Чтобы определить, какую текстуру я хочучтобы использовать во время выполнения шейдера, я передаю ему индекс:
GLES31.glUniform1i(handleOnTextureIndice, idTexture);
с idTexture в диапазоне от 0 до 6 в зависимости от текстуры, которую я хочу использовать.
Вфрагментный шейдер, чтобы вычислить цвет фрагмента, к текстуре обращаются следующим образом: textures[textureIndice]
.
Проблема, с которой я сталкиваюсь, состоит в том, что только последняя загруженная текстура дает правильный результат, а все остальные отображаются как черные!
Что я делаю не так?