我正在开发一个Android应用程序,当使用vuforia SDK检测到图像目标时,该应用程序可以增强3D模型。九个3D模型同时得到增强。我使用GLES20.glGenTextures(1,textureHandle,0)方法加载纹理。所以我在下面调用了九次方法并将整数值存储在整数数组中。
public static int loadTexture(Bitmap bitmap)
{
final int[] textureHandle = new int[1];
GLES20.glGenTextures(1, textureHandle, 0);
if (textureHandle[0] != 0)
{
isaugmented1 = false;
android.graphics.Matrix matrix = new android.graphics.Matrix();
bitmap = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
// Bind to the texture in OpenGL
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]);
// Set filtering
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
// Load the bitmap into the bound texture.
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
// Recycle the bitmap, since its data has been loaded into OpenGL.
bitmap = null;
}
if (textureHandle[0] == 0)
{
throw new RuntimeException("Error loading texture.");
}
return textureHandle[0];
}
现在我要删除所有九个纹理,所以我称之为
GLES20.glDeleteTextures(1, temphandler, 0)
循环中的方法,如下面的代码所示。但结果只删除了最后一个纹理。我想删除所有存储的纹理。
public void deleteTexture()
{
if(mosaicHandler!=null){
if(mosaicHandler.length>0)
{
Log.e("deleting", "texture");
for(int i = 0; i<mosaicHandler.length;i++)
{
Log.e("deletingTexture", i+"");
int [] temphandler = new int[1];
temphandler[0] = mosaicHandler[i];
GLES20.glDeleteTextures(1, temphandler, 0);
}
}
}
}
还有其他方法可以删除其Id存储在整数数组中的纹理吗?
答案 0 :(得分:0)
要一次删除多个纹理,只需按照opengl api
进行操作即可https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDeleteTextures.xml