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は鋼鉄で描かれると思っていたのですが、どちらの形も鋼鉄で描かれていることがわかりました。バインド時にテクスチャのインデックスを変更すると(1、2、3ではなくTEXTURE0、TEXTURE1、TEXTURE2のglActiveTexture)、両方の形状がレンガで描画されます。どの値がglUniform1fに渡されるかは問題ではないようです。
私はここで途方に暮れています、私はAndroid OpenGL ES2.0テクスチャスワッピングの方法に従っていましたが、彼が使用している均一な通常のハンドルを使用しないことを除いて(私が知る限り、それらは必要ではありませんか?)、私は ' mなぜそれが機能しないのかわからない。考え?