android opengl es 2.0 纹理切换

标签 android opengl-es-2.0 textures

我有以下加载和绑定(bind) 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 会用钢绘制,但我发现这两种形状都是用钢绘制的。如果我在绑定(bind)时更改纹理的索引(glActiveTexture 使用 TEXTURE0、TEXTURE1、TEXTURE2 而不是 1、2、3),两个形状都绘制在砖 block 中。传递给 glUniform1f 的值似乎并不重要。

我在这里不知所措,我正在遵循 Android OpenGL ES2.0 Texture Swapping 中的方法,但除了不使用他正在使用的统一普通 handle (据我所知它们不是必需的?),我不确定为什么它不起作用。想法?

最佳答案

我看到您正在为采样器调用 glUniform1f 而不是 glUniform1i。我不知道这是否一定会导致错误,但这看起来确实有点奇怪,而且我不确定如果您尝试使用 float 设置采样器会发生什么。

你还有 glGetError 吗?

关于android opengl es 2.0 纹理切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10592867/

相关文章:

android - 照片选择器。肖像转风景

android - 如何查找 RecyclerView 是否正在向上或向下滚动

android - 如果当前 Activity 可以处理 NFC,则不显示 App Picker

android - 最佳实践 - 声明 opengles 2.0 立方体顶点

android - GLES 错误 : vertex attribute array is enabled with no data bound

libgdx - 在 libgdx 中高效使用多个纹理

c++ - 在 OpenGL 中渲染纹理 1 到 1

android - 如何检查android中的用户是否拒绝了权限

opengl-es-2.0 - 在 Scenekit 中的透明地板/平面上显示阴影

ios - 如何在 iOS 中绘制纹理按钮?