问题描述
首先,我是新来的OpenGL,但在我的手机(摩托罗拉仿生)以下的code工作按预期。
First off I am new to OpenGL, but on my phone (Motorola Bionic) the following code works as intended.
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);
}
它会显示正确的纹理和法线的每个塔。在旧的手机(我的朋友们不可思议),它只是显示所有与上次类型的质感塔正在制定。我只是换了正确的纹理Texture1每个塔,但并不慢,在?
It will display the correct texture and normal for each tower. On older phones (my friends Incredible) it just display all of the towers with the texture of the last type being drawn. I could just swap in the correct texture to Texture1 for each tower, but isn't that slower and looked down upon?
没有任何人有任何信息,为什么它不工作的一些手机和我需要做的,使所有OpenGLES20兼容的手机之符合?
Does anyone have any information as to why it isn't working on some phones and what I need to do to make it compliant across all OpenGLES20 compatible phones?
推荐答案
您很可能创下最大活动纹理的一些限制,例如文档说:
You're probably hitting some limit of maximum active textures, for example as docs says:
glActivateTexture
- 纹理单元的数量是 与实现相关的,但必须是至少两个
另外,你可能要检查 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
(用 glGet
)。
Also you might want to check GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
(with glGet
).
要调试问题,您可能需要在每次通话后,检查 glGetError
glActiveTexture
/ glBindTexture
,也许那些 glUniform1i
。
To debug problem you might want to check for glGetError
after each call glActiveTexture
/glBindTexture
and maybe those glUniform1i
.
这篇关于安卓的OpenGL ES2.0纹理交换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!