У меня есть растровое изображение (которое можно преобразовать в ByteBuffer). Я хочу загрузить все свои 6 граней смещениями на GPU в OpenGL. Когда я делаю следующее, приложение вылетает с OpenGL, что приводит к нарушению памяти.Нарушение памяти в Android OpenGL GLES20 с glTexImage2D
Здесь bitmap
массив байтов byte[]
for (int i=0 ; i<6 ; i++) {
GLES20.glTexImage2D(
GLES20.GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,
0,
GLES20.GL_RGBA,
side,
side,
0,
GLES20.GL_RGBA,
GLES20.GL_UNSIGNED_BYTE,
ByteBuffer.wrap(bitmap, length/6 * i, side * side * 4));
}
Но когда я копирую массив, а затем загрузить на GPU, как это (здесь bitmap
имеет тип Bitmap
):
int numBytes = bitmap.getByteCount();
ByteBuffer pixels = ByteBuffer.allocate(numBytes);
bitmap.copyPixelsToBuffer(pixels);
for (int i=0 ; i<6 ; i++) {
Log.d("aakash", String.valueOf(numBytes/6 * i));
byte[] arr = Arrays.copyOfRange(pixels.array(), numBytes/6 * i, numBytes/6 * (i+1));
GLES20.glTexImage2D(
GLES20.GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,
0,
GLES20.GL_RGBA,
bitmap.getWidth(),
bitmap.getHeight()/6,
0,
GLES20.GL_RGBA,
GLES20.GL_UNSIGNED_BYTE,
ByteBuffer.wrap(arr));
}
Я получаю правильно созданный куб.
Что я делаю неправильно в первом? Я хочу избежать копирования массива для загрузки его частей на GPU.
Я могу заверить, что размер и математические вычисления верны.