1

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なぜそれが機能しないのかわからない。考え?

4

1 に答える 1

2

glUniform1fの代わりにサンプラーを呼び出しているようですglUniform1i。それが必ずしもエラーを引き起こすかどうかはわかりませんが、少し奇妙に思えますし、float でサンプラーを設定しようとするとどうなるかわかりません。

また、どこにも glGetError がありますか?

于 2012-05-15T01:09:09.947 に答える