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?