最初に私はOpenGLを初めて使いましたが、私の電話(Motorola Bionic)では次のコードが意図したとおりに動作します。Android OpenGL ES2.0テクスチャスワッピング
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTowerTextureHandle);
GLES20.glActiveTexture(GLES20.GL_TEXTURE2);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTowerNormalHandle);
GLES20.glActiveTexture(GLES20.GL_TEXTURE3);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mFrostTextureHandle);
GLES20.glActiveTexture(GLES20.GL_TEXTURE4);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mFrostNormalHandle);
GLES20.glActiveTexture(GLES20.GL_TEXTURE5);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mFireTextureHandle);
GLES20.glActiveTexture(GLES20.GL_TEXTURE6);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mFireNormalHandle);
...
for (int i =0; i < mGame.towers.length; i++)
{
switch (mGame.towers[i].type)
{
case Dart:
GLES20.glUniform1i(mTextureUniformHandle, 1);
GLES20.glUniform1i(mTextureNormalUniformHandle, 2);
break;
case Frost:
GLES20.glUniform1i(mTextureUniformHandle, 3);
GLES20.glUniform1i(mTextureNormalUniformHandle, 4);
break;
case Fire:
GLES20.glUniform1i(mTextureUniformHandle, 5);
GLES20.glUniform1i(mTextureNormalUniformHandle, 6);
break;
}
...
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 6);
}
タワーごとに正しいテクスチャとノーマルが表示されます。古い携帯電話(私の友人Incredible)では、最後のタイプのテクスチャが描かれたタワーのすべてが表示されます。私は各タワーのテクスチャ1に正しいテクスチャを入れ替えることができますが、それほど遅くはないのですか?
一部の携帯電話では動作しない理由と、すべてのOpenGLES20互換携帯電話で互換性を持たせるために必要な情報はありますか?
ドキュメントが言うようにあなたはおそらく、例えば、最大のアクティブなテクスチャのいくつかの制限に達している