Android Opengl-es загружает текстуру без мощности 2

У меня есть приложение, с которым я неоднократно играл в 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.

10
задан Community 23 May 2017 в 12:13
поделиться