在OpenGl 2.0中删除纹理

时间:2015-03-18 09:07:18

标签: android opengl-es opengl-es-2.0 vuforia

我正在开发一个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存储在整数数组中的纹理吗?

1 个答案:

答案 0 :(得分:0)

要一次删除多个纹理,只需按照opengl api

进行操作即可

https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDeleteTextures.xml