将一个简单的图像(可绘制目录中的位图)加载到opengl渲染器中

时间:2014-04-23 22:00:42

标签: android opengl-es-2.0

我对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();
    }

1 个答案:

答案 0 :(得分:1)

我过去曾使用decodeResource BitmapFactory方法来实现此目的。通过命名,调用将如下所示:

Bitmap image = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);

你所拥有的东西应该也可以,但上面的内容似乎更简单。

你应该把它放在onSurfaceCreated()中。您可能希望将纹理ID存储在类成员中,以便可以在onDrawFrame()中再次绑定它。如果仅使用单个纹理,则这不是必需的,因为在这种情况下您可以保持绑定。但它更清洁,如果你将来使用多个纹理,它会扩展。