Android Opengl-es加载非2次纹理的力量

iex*_*xus 10 android textures opengl-es bitmap

我有一个我在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);
Run Code Online (Sandbox Code Playgroud)

显而易见的问题是我使用的纹理必须是2的幂.目前我正在预编辑photoshop中的纹理是2的幂并且只有空边框.然而,这有点乏味,我希望能够像它们一样加载它们.认识到它们不是2的力量并将它们加载到纹理中.

我知道我可以缩放位图以成为2尺寸的力量并简单地拉伸纹理但是我不希望拉伸纹理,并且在某些情况下可能想要将几个纹理放入一个"图集"中.

我知道我可以使用glTexSubImage2D()将纹理粘贴到我想要的原点所需的数据中.这很棒!

但是我不知道如何在Android中初始化没有数据的纹理?

在这个问题中,之前提出的建议是调用没有数据的glTexImage2D()然后填充它.

但是在android中调用"GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0,bmp,0)"时; 你没有指定宽度/高度.它从我假设的位图读取.

做这个的最好方式是什么?我可以创建一个只有2个大小的正确幂的新位图,并且没有填充任何数据并使用它初始化纹理然后使用subImage粘贴到它中吗?或者我应该以某种方式将新的位图以某种方式复制到我想要的像素(不确定是否可以轻松完成)到这个新的位图(离开边框)然后使用它?

编辑:澄清我正在使用opengl.

aho*_*der 4

我认为如果您尝试创建具有 2 个轴大小的幂的位图,然后添加您的位图,它应该可以正常工作。也许像

Bitmap.createBitmap(notPowerOf2Bitmap, offx, offy, xsize, ysize, bitmapFlag)
Run Code Online (Sandbox Code Playgroud)

除此之外,我想说的是,在 Photoshop 过程中受苦了。你有多少张照片?