三星手机上未显示Android OpenGL ES纹理

三星手机上未显示Android OpenGL ES纹理,android,opengl-es,textures,Android,Opengl Es,Textures,我是一个长期的读者,第一次发布海报,最近我发现我的Android游戏有一个奇怪的问题。我用我的HTC Desire Z和模拟器一起测试我的游戏,一切正常,但我的朋友最近告诉我,在三星手机上,至少Galaxy S2和常规Galaxy有这种症状,屏幕只是保持白色。在用一个朋友的手机进行了一点调试后,我发现游戏运行正常,但纹理并不仅仅显示出来。我试着寻找这个问题,但没有发现任何有用的东西 纹理是.png、正方形和POT。以下是从位图加载开始的相关代码位: private boolean LoadTex

我是一个长期的读者,第一次发布海报,最近我发现我的Android游戏有一个奇怪的问题。我用我的HTC Desire Z和模拟器一起测试我的游戏,一切正常,但我的朋友最近告诉我,在三星手机上,至少Galaxy S2和常规Galaxy有这种症状,屏幕只是保持白色。在用一个朋友的手机进行了一点调试后,我发现游戏运行正常,但纹理并不仅仅显示出来。我试着寻找这个问题,但没有发现任何有用的东西

纹理是.png、正方形和POT。以下是从位图加载开始的相关代码位:

private boolean LoadTextures(GL10 gl) {
   if(DEBUG)
      Log.d(TAG, "Loading textures.");
   bitmaps[0] = R.raw.game;
   bitmaps[1] = R.raw.splash;
   bitmaps[2] = R.raw.menu;
   bitmaps[3] = R.raw.font01;
   bitmaps[4] = R.raw.bg;
   bitmaps[5] = R.raw.gameover;
   bitmaps[6] = R.raw.helpc;
   bitmaps[7] = R.raw.helptag;      

   gl.glGenTextures(NUM_TEXTURES, textures, 0);

   for(int i=0; i<NUM_TEXTURES; i++) {
      bitmap = BitmapFactory.decodeResource(context.getResources(), bitmaps[i]);
      if(bitmap == null)
      {
         if(DEBUG)
         {
            Log.w(TAG, "Bitmap decoding failed, aborting.");
            return false;
         }
      }

      gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i]);
      gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, 
                         GL10.GL_LINEAR);
      gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, 
                         GL10.GL_LINEAR);
      gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, 
                         GL10.GL_CLAMP_TO_EDGE);
      gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, 
                         GL10.GL_CLAMP_TO_EDGE);
      GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
      bitmap.recycle();
   }
return true;
}
我的onSurfaceChanged函数

public void onSurfaceChanged(GL10 gl, int width, int height) {
   if(LoadTextures(gl)) // load textures
   {
      if(DEBUG)
         Log.d(TAG, "Textures loaded succesfully.");
   }
   else
   {
      if(DEBUG)
         Log.w(TAG, "Texture loading failed.");
   }
   gl.glViewport(0, 0, width, height);
   gl.glMatrixMode(GL10.GL_PROJECTION);
   gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
   gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
   gl.glLoadIdentity();
   gl.glOrthof(-width/2f, width/2f, -height/2f, height/2f, -1, 1);
   gl.glMatrixMode(GL10.GL_MODELVIEW);
   gl.glFrontFace(GL10.GL_CCW);
   gl.glEnable(GL10.GL_CULL_FACE);
   gl.glCullFace(GL10.GL_BACK);     
   gl.glEnable(GL10.GL_TEXTURE_2D);
   gl.glEnable(GL10.GL_BLEND);
   gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
   gl.glLoadIdentity();
   Log.d(TAG, "Set GL modes succesfully.");
}
OnDrawFrame的相关图纸:

gl.glClearColor(0f, 0f, 0f, 1.0f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glPushMatrix();
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, i.GetBuffers().GetVertexBuffer());      
gl.glTranslatef(i.GetXCoordinate(),i.GetYCoordinate(), i.GetZCoordinate());
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i.GetBuffers().GetTextureId()]);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, i.GetBuffers().GetTextureBuffer());
gl.glDrawElements(GL10.GL_TRIANGLES, i.GetBuffers().GetIndicesCount(),   
                  GL10.GL_UNSIGNED_SHORT, i.GetBuffers().GetIndexBuffer());                          
gl.glPopMatrix();

如果您有任何关于为什么这在三星手机上不起作用的提示,我们将不胜感激。

您是否在任何地方有glGetError?您是否在任何地方有glGetError?
gl.glClearColor(0f, 0f, 0f, 1.0f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glPushMatrix();
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, i.GetBuffers().GetVertexBuffer());      
gl.glTranslatef(i.GetXCoordinate(),i.GetYCoordinate(), i.GetZCoordinate());
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i.GetBuffers().GetTextureId()]);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, i.GetBuffers().GetTextureBuffer());
gl.glDrawElements(GL10.GL_TRIANGLES, i.GetBuffers().GetIndicesCount(),   
                  GL10.GL_UNSIGNED_SHORT, i.GetBuffers().GetIndexBuffer());                          
gl.glPopMatrix();