4

最近、ライブ壁紙アプリケーションに取り組みました。その中で、Android のライブ壁紙に奇妙な問題があることがわかりました。HTC Wildfire S、Samsung Galaxy タブ、Motorola Droid Millstone、Samsung Galaxy pop を使用して、壁紙とエミュレーターをテストし、すべて正常に動作していますが、Samsung ハンドセット (Samsung Galaxy S II および Samsung Galaxy Player に症状があります) では、最初の起動では、画面は黒のままです。しかし、設定画面に移動してプレビューに戻ると、正常に動作しています。これらのハンドセットで少しデバッグした後、壁紙が正しく読み込まれることを確認できましたが、テクスチャは表示されていません。問題について検索してみましたが、役立つものは見つかりませんでした。

ネイティブ コードからテクスチャをバインドします。その中で、壁紙をバインドするために 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

これが Samsung の携帯電話で機能しないのはなぜですか?

4

2 に答える 2

0

この問題を修正します。それはすべてopenglライブラリの開始にあります。このコード行を追加する glViewport(0, 0, screenWidth, screenHeight); と、バグが修正されました。これで、openglアプリケーションがすべてのデバイスをレンダリングします。君たちありがとう。

于 2012-05-03T13:21:20.293 に答える
-2

OpenGL ES アクセラレータを持たない一部のデバイスは、OpenGL ライブラリを使用するアプリを実行できません..マニフェスト ファイルでデバイスをフィルタリングして、それらのデバイスにアプリがインストールされないようにすることをお勧めします...

于 2012-04-25T06:00:43.100 に答える