2012-02-20 2 views
2

먼저 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)에서는 그려진 마지막 유형의 질감으로 모든 타워를 표시합니다. Texture1에 맞는 텍스쳐를 각 타워마다 바꿀 수는 있지만 그렇게 느리지는 않습니다.

일부 휴대 전화에서 작동하지 않는 이유와 모든 OpenGLES20 호환 휴대 전화에서 호환되도록해야하는 이유에 대한 정보가있는 사람이 있습니까?

답변

3

당신은 아마 문서 예를 들어, 최대 유효 텍스처의 일부 제한 타격을하는지 말한다 :

glActivateTexture - 텍스처 유닛의 수는 구현에 의존해야하지만 적어도 두

또한 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS (glGet)으로 확인하고 싶을 수도 있습니다.

디버그 문제에 대한 각 호출 glActiveTexture/glBindTexture 어쩌면 그 glUniform1iglGetError을 확인 할 수 있습니다.