У меня есть приложение, с которым я неоднократно играл в 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. В настоящее время я предварительно редактирую текстуры в фотошопе, чтобы они имели степень 2 и просто имели пустые границы. Однако это немного утомительно, и я хочу иметь возможность загружать их такими, какие они есть ... распознавать, что они не имеют степени 2, и загружать их в текстуру, которая есть.
Я знаю, что могу масштабировать растровое изображение до степени 2 и просто растянуть текстуру, но я не хочу растягивать текстуру, а в некоторых случаях может потребоваться поместить несколько текстур в один "атлас".
Я знаю, что могу использовать glTexSubImage2D (), чтобы вставить в текстуру данные, которые я хочу, в нужном источнике. Это здорово!
Однако я не знаю, как в Android инициализировать текстуру без данных?
В этом вопросе ранее заданном было предложено вызвать glTexImage2D () без данных и затем заполнить их.
Однако в Android, когда вы вызываете «GLUtils.texImage2D (GL10.GL_TEXTURE_2D, 0, bmp, 0);» Вы не указываете ширину / высоту. Это читает это из растрового изображения, которое я предполагаю.
Каков наилучший способ сделать это? Могу ли я создать новое растровое изображение правильной степени 2 размера, только пустое и не заполненное какими-либо данными, и использовать его для инициализации текстуры, а затем вставить в нее с помощью subImage? Или я должен сделать новое растровое изображение каким-либо образом скопировать нужные пиксели (не уверен, что вы можете сделать это легко) в это новое растровое изображение (оставляя границы), а затем просто использовать это?
Редактировать: пояснил, что я использую opengl.