我对OpenglES很新,试图加载一个简单的位图。我在教程中发现了这个,但是我在onSurfaceCreated()和onDrawFrame()中写了什么。
private void initImage(GL10 gl) {
int[] textures = new int[1];
gl.glGenTextures(1, textures, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glTexParameterf(
GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_NEAREST);
gl.glTexParameterf(
GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterf(
GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_WRAP_S,
GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(
GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_WRAP_T,
GL10.GL_CLAMP_TO_EDGE);
gl.glTexEnvf(
GL10.GL_TEXTURE_ENV,
GL10.GL_TEXTURE_ENV_MODE,
GL10.GL_REPLACE);
InputStream in = context.getResources().openRawResource(R.drawable.ic_launcher);
Bitmap image;
try { image = BitmapFactory.decodeStream(in); }
finally {
try { in.close(); } catch(IOException e) { }
}
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, image, 0);
image.recycle();
}
答案 0 :(得分:1)
我过去曾使用decodeResource
BitmapFactory
方法来实现此目的。通过命名,调用将如下所示:
Bitmap image = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
你所拥有的东西应该也可以,但上面的内容似乎更简单。
你应该把它放在onSurfaceCreated()
中。您可能希望将纹理ID存储在类成员中,以便可以在onDrawFrame()
中再次绑定它。如果仅使用单个纹理,则这不是必需的,因为在这种情况下您可以保持绑定。但它更清洁,如果你将来使用多个纹理,它会扩展。