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