android opengl es 2.0纹理切换

时间:2012-05-15 00:51:50

标签: android opengl-es-2.0 textures

我有以下代码加载和绑定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的方法,但除了不使用他正在使用的统一正常句柄(据我所知他们没有必要?),我我不确定为什么它不起作用。想法?

1 个答案:

答案 0 :(得分:2)

我发现您为采样器而不是glUniform1f呼叫glUniform1i。我不知道这是否会导致错误,但它确实有点奇怪,我不确定如果你试图用浮点数设置一个采样器会发生什么。

你在任何地方也有glGetError吗?