最近、ライブ壁紙アプリケーションに取り組みました。その中で、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 の携帯電話で機能しないのはなぜですか?