0

我正在在线阅读有关如何在 android 应用程序中加载纹理并将它们传递给着色器的教程。我找到了这个方法

    public static int loadTexture(final Context context, final int resourceId)
{
    final int[] textureHandle = new int[1];

    GLES20.glGenTextures(1, textureHandle, 0);

    if (textureHandle[0] != 0)
    {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inScaled = false;   // No pre-scaling

        // Read in the resource
        final Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId, options);

        // 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.recycle();
    }

    if (textureHandle[0] == 0)
    {
        throw new RuntimeException("Error loading texture.");
    }

    return textureHandle[0];
}

但我该如何使用它?调用这个方法的时候我把什么作为参数???它返回的整数是什么?我想根据我对 opengl 的了解,它返回的 int 只是纹理的“数字”,以防我加载许多纹理。如果可以的话,纹理句柄。但是剩下的呢???

4

1 回答 1

0

ANDROID 和上下文 如果您查看各种 Android API,您会注意到其中许多都将 android.content.Context 对象作为参数。您还会看到 Activity 或 Service 通常用作上下文。这是可行的,因为这两个类都是从 Context 扩展而来的。

上下文到底是什么?根据 Android 参考文档,它是一个代表各种环境数据的实体。它提供对本地文件、数据库、与环境关联的类加载器、包括系统级服务在内的服务等的访问。在本书中,以及在您使用 Android 进行的日常编码中,您会看到上下文频繁地传递。出自:《Android in Practice》一书。

所以上面的方法应该在 mainactivity 类中调用,第一个参数是 getApplicationContext(), getContext(),getBaseContext()this

resourceID 表示您希望使用的资源文件。就我而言,我在 res/drawable 文件夹中有一个 BMP 图像,这可以通过编写

R.res.myimagename.bmp

and this simple code returns a simple integer that is the location of the resource file so in fact resourceID. In other terms it somewhat like a relative path to the resource file

于 2012-11-23T13:27:10.777 回答