Android OpenGL ES纹理在一些三星设备的黑色屏幕上显示

时间:2012-04-25 05:56:48

标签: android opengl-es live-wallpaper samsung-mobile

我最近参与了一个动态壁纸应用程序。在那我发现我的Android动态壁纸有一个奇怪的问题。我使用我的HTC Wildfire S,三星Galaxy标签,摩托罗拉Droid Millstone,三星galaxy pop来测试我的壁纸以及模拟器,一切正常,但三星手机(三星Galaxy S II和三星Galaxy播放器有症状)屏幕只是保持黑色的初始启动。但是,一旦我们移动到设置屏幕并返回预览其工作正常。经过对这些手机的一点调试,我能够发现壁纸正确加载,但纹理不仅仅出现。我试着搜索这个问题,但没有找到任何帮助。

我从本机代码绑定纹理。在那我使用OPEN GL库绑定壁纸。我的opengl库启用就像下面的

 glEnable(GL_TEXTURE_2D);
  glGenTextures(1, &textureConverted);
  glBindTexture(GL_TEXTURE_2D,textureConverted);
  //...and bind it to our array
  __android_log_print(ANDROID_LOG_DEBUG,
              "NDK initOpenGL()",
              "binded texture"
              );
  glTexParameterf(GL_TEXTURE_2D, 
          GL_TEXTURE_MIN_FILTER, 
          GL_NEAREST);
  glTexParameterf(GL_TEXTURE_2D, 
          GL_TEXTURE_MAG_FILTER, 
          GL_NEAREST);
  //Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE
  glTexParameterf(GL_TEXTURE_2D, 
          GL_TEXTURE_WRAP_S, 
          GL_CLAMP_TO_EDGE);
  //GL_REPEAT);
  glTexParameterf(GL_TEXTURE_2D, 
          GL_TEXTURE_WRAP_T, 
          GL_CLAMP_TO_EDGE);
  //GL_REPEAT);
  glTexImage2D(GL_TEXTURE_2D,       /* target */
           0,           /* level */
           GL_RGBA,         /* internal format */
           textureWidth,        /* width */
           textureHeight,       /* height */
           0,           /* border */
           GL_RGBA,         /* format */
           GL_UNSIGNED_BYTE,/* type */
           NULL);
  //setup simple shading
  glShadeModel(GL_FLAT);
  //check_gl_error("glShademo_comdel");
  glColor4x(0x10000, 0x10000, 0x10000, 0x10000);

和我的drawFunction

 glClear(GL_COLOR_BUFFER_BIT);
  int max;
  glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max);
    __android_log_print(ANDROID_LOG_DEBUG,
              "NDK drawFrame()",
              "GL_MAX_TEXTURE_SIZE: %d",
        max);
  glBindTexture(GL_TEXTURE_2D,textureConverted);
  int rect[4] = {0, textureHeight, textureWidth, nTextureHeight};
  glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect);

  glTexSubImage2D(GL_TEXTURE_2D, /* target */
          0,        /* level */
          0,    /* xoffset */
          0,    /* yoffset */
          textureWidth,
          textureHeight,
          GL_RGBA,  /* format */
          GL_UNSIGNED_BYTE, /* type */
          pFrameConverted->data[0]);
  glDrawTexiOES(0, 0, 0, drawWidth, drawHeight); //drawWidth is th screenwidth and drawheight is the screenheight

为什么这不适用于三星手机?

2 个答案:

答案 0 :(得分:0)

我解决了这个问题。这一切都在opengl库的启动中。当我添加glViewport(0, 0, screenWidth, screenHeight);这行代码时,错误得到修复。现在我的opengl应用程序呈现所有设备。谢谢你们。

答案 1 :(得分:-1)

某些没有OpenGL ES Accelerator的设备无法运行使用OpenGL库的应用程序....更好地过滤清单文件中的设备,以防止在这些设备中安装应用程序......