在Android openGL中加载两个不同的纹理

时间:2014-06-11 13:06:22

标签: android opengl-es textures

我正在尝试在Applikation中加载多个纹理。问题是第二个纹理没有显示正确。 这就是我得到Handels的方式:

 mTextureDataHandle = TextureHelper.loadTexture(mActivityContext, R.drawable.full_texture);
 mTextureDataHandleError = TextureHelper.loadTexture(mActivityContext, R.drawable.full_texture_error);

使用此方法:

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];
}

在onDrawFrame方法中我使用它在纹理之间切换:

    if (LessonFourActivity.error) {
        GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataHandleError);
        GLES20.glUniform1i(mTextureUniformHandle, 1);
    } else {
        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);

        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataHandle);
        GLES20.glUniform1i(mTextureUniformHandle, 0);
    } 

没有错误的纹理工作正常但是当我切换到错误纹理时它只是黑色。 有谁知道答案吗?

我已经找到了一些关于GL10的答案,但他们没有帮助我。

0 个答案:

没有答案