У меня есть приложение, с которым я неоднократно играл в Android, оно использует opengl-es.
В настоящее время я загружаю текстуры из растровое изображение вроде этого:
//Load up and flip the texture - then dispose the temp
Bitmap temp = BitmapFactory.decodeResource(Deflecticon.getContext().getResources(), resourceID);
Bitmap bmp = Bitmap.createBitmap(temp, 0, 0, temp.getWidth(), temp.getHeight(), flip, true);
temp.recycle();
//Bind the texture in memory
gl.glBindTexture(GL10.GL_TEXTURE_2D, id);
//Set the parameters of the texture.
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
//On to the GPU
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
Очевидная проблема заключается в том, что используемая мной текстура должна иметь степень 2. В данный момент я предварительно редактирую текстуры в Photoshop, чтобы она была степенью 2 и просто имела пустые границы . Однако это немного утомительно, и я хочу иметь возможность загружать их такими, какие они есть ... признать, что они не являются степенью двойки, и загрузить их в текстуру, которая есть.
Я знаю, что могу масштабировать растровое изображение до размера степени 2 и просто растягивать текстуру, но я не хочу растягивать текстуру и в некоторых случаях могу захотеть поместить несколько текстур в один «атлас».
Я знаю, что могу использовать glTexSubImage2D (), чтобы вставить в текстуру нужные мне данные в нужном мне источнике. Это здорово!
Однако я не знаю, как в Android инициализировать текстуру без данных?
В этом вопросе , ранее заданном , предлагалось вызвать glTexImage2D () без данных и затем заполните его.
Однако в Android при вызове «GLUtils.texImage2D (GL10.GL_TEXTURE_2D, 0, bmp, 0);» вы не указываете ширину / высоту. Я полагаю, он читает это из растрового изображения.
Как лучше всего это сделать? Могу ли я создать новое растровое изображение правильной мощности размера 2, только пустое и не заполненное какими-либо данными, и использовать его для инициализации текстуры, а затем вставить в нее с помощью subImage? Или мне следует создать новое растровое изображение, каким-то образом скопировать пиксели, которые я хочу (не уверен, что это легко сделать), в это новое растровое изображение (оставляя границы), а затем просто использовать это?
Изменить: пояснил, что я использую opengl.