我有一个在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的幂大小,并简单地拉伸纹理,但我不想拉伸纹理,并且在某些情况下可能需要将几个纹理放入一个“atlas”中。
我知道我可以使用glTexSubImage2D()将我想要的数据粘贴到纹理中,而且可以指定想要的原点。这很好!
但是,我不知道在Android中如何初始化没有数据的纹理?
在这个问题之前问过的建议是调用glTexImage2D()没有数据,然后填充它。
但是,在Android中当您调用“GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0,bmp,0);”时,您没有指定宽度/高度。我认为它从位图中读取这个信息。
最好的方法是什么?我可以创建一个正确大小的新位图,只有空白而没有任何数据,并使用它来初始化纹理,然后使用subImage粘贴到其中吗?或者应该制作一个新的位图,以某种方式将我想要的像素复制(不确定是否可以轻松地实现)到这个新位图中(保留边框),然后只使用此?