Android OpenGL ES2.0 Замена текстуры

Во-первых, я новичок в OpenGL, но на моем телефоне (Motorola Bionic) следующий код работает как задумано.

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) он просто отображает все башни с текстурой последнего нарисованного типа. Я мог бы просто поменять правильную текстуру на Texture1 для каждой башни, но разве это не медленнее и на меня свысока?

У кого-нибудь есть какая-либо информация о том, почему он не работает на некоторых телефонах и что мне нужно сделать, чтобы сделать его совместимым со всеми телефонами, совместимыми с OpenGLES20?

Ответы на вопрос(1)

Ваш ответ на вопрос