我有以下代码可以加载和绑定 3 个纹理:
// Load the texture
mTextureDataHandle[0] = TextureHelper.loadTexture(mActivityContext, R.drawable.bricks);
mTextureDataHandle[1] = TextureHelper.loadTexture(mActivityContext, R.drawable.grass);
mTextureDataHandle[2] = TextureHelper.loadTexture(mActivityContext, R.drawable.steel);
// Set the active texture unit to texture unit 0 and bind to the texture data.
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataHandle[0]);
GLES20.glActiveTexture(GLES20.GL_TEXTURE2);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataHandle[1]);
GLES20.glActiveTexture(GLES20.GL_TEXTURE3);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataHandle[2]);
然后我想独立使用每个纹理:
GLES20.glUseProgram(mPerVertexTexturedProgramHandle);
GLES20.glUniform1f(mTextureUniformHandle, 2);
drawStuff();
GLES20.glUseProgram(mPerVertexProgramHandle);
//Draw some smooth shapes
GLES20.glUseProgram(mPerVertexTexturedProgramHandle);
GLES20.glUniform1f(mTextureUniformHandle, 3);
drawOtherStuff();
GLES20.glUseProgram(mPerVertexProgramHandle);
我原以为 Stuff 会用草绘制,OtherStuff 会用钢绘制,但我发现这两种形状都是用钢绘制的。如果我在绑定时更改纹理的索引(glActiveTexture 使用 TEXTURE0、TEXTURE1、TEXTURE2 而不是 1、2、3),则两个形状都以砖块绘制。将什么值传递给 glUniform1f 似乎并不重要。
我在这里不知所措,我正在遵循Android OpenGL ES2.0 Texture Swapping的方法,但除了不使用他正在使用的统一普通句柄(据我所知它们不是必需的?),我'我不确定为什么它不起作用。想法?