我正在网上阅读有关如何在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只是纹理的“数字”,以防我加载许多纹理。你可以使用纹理处理。但其余的呢?
答案 0 :(得分:0)
ANDROID AND CONTEXT如果您查看各种Android API,您会发现其中许多都将android.content.Context对象作为参数。您还将看到活动或服务通常用作上下文。这是有效的,因为这两个类都从Context扩展。
究竟是什么情境?根据Android参考文档,它是一个表示各种环境数据的实体。它提供对本地文件,数据库,与环境关联的类加载器,服务(包括系统级服务)等的访问。在本书和使用Android的日常编码中,您将看到Context经常传递。来自:“Android in Practice”一书。
所以上面的方法应该在mainactivity类中调用,第一个参数是getApplicationContext()
,getContext()
,getBaseContext()
或this
resourceID表示您希望使用的资源文件。在我的情况下,我在res / drawable文件夹中有一个BMP图像,这可以通过编写
来获得R.res.myimagename.bmp
这个简单的代码返回一个简单的整数,它是资源文件的位置,所以实际上是resourceID。换句话说,它有点像资源文件的相对路径