Я слежу за этим руководством для отображения растрового изображения в OpenGL
Однако у меня есть очередь битмапов, которые я хочу отображать по одному.
Должен ли я создавать новую текстуру каждый раз в onDrawFrame
для Bitmap
я имею в качестве главы очереди, как в onDrawFrame
:
Bitmap bitmap = ...
// generate one texture pointer
gl.glGenTextures(1, textures, 0);
// ...and bind it to our array
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
// create nearest filtered texture
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
// Use Android GLUtils to specify a two-dimensional texture image from our bitmap
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
// Clean up
bitmap.recycle();
Или я могу как-то сделать только часть этих операций, перемещая некоторые другие операции над onSurfaceChanged
возможно?
Если вы хотите заменить текстуру другой текстурой (и у вас нет намерения сохранить первую текстуру), то вызов glTexImage2D
или GLUtils.texImage2D
- это единственное, что вам нужно сделать во второй раз. Это просто заменяет существующие данные текстуры новыми данными. Вы можете вызвать это из любого места, где у вас есть действующий контекст OpenGL.
Если текстуры имеют одинаковый размер, я бы предположил, что использование glTexSubImage2D
будет улучшением, так как оно не изменит размер текстуры, а затем, вероятно, может избежать выделения памяти на gpu (просто повторяет одну и ту же память).