Недавно я работал над приложением живых обоев. В том, что я узнал, что у моих Android-живых обоев есть странная проблема. Я использую свой HTC Wildfire S, вкладку Samsung Galaxy, Motorola Droid Millstone, галактику Samsung, чтобы проверить мои обои вместе с эмулятором, и все работает нормально, но на телефонах Samsung (Samsung Galaxy S II и Samsung Galaxy Player имеют симптом) экран просто остается черным для первоначального запуска. Но как только мы перейдем к экрану настроек и вернемся, чтобы просмотреть его рабочий тон. После небольшой отладки с этими телефонами я смог узнать, что обои загружаются правильно, но текстуры не просто появляются. Я попытался найти проблему, но ничего не нашел.Android OpenGL ES Текстуры, показывающие на черном экране на некоторых устройствах Samsung
Я связываю текстуру с нативным кодом. В этом я использую библиотеку OPEN GL для привязки обоев. Моя библиотека OpenGL intiation, как следующая
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?
Вставьте glGetError в код и посмотрите, не попадает ли что-либо. Возможно, вы можете превысить GL_MAX_TEXTURE_SIZE, но не можете сказать точно. – Tim
Я попытался с функцией glGetError() в моем коде. Он всегда возвращает 0. Так что я думаю, что нет проблем. – Satheesh
вам нужно предоставить нам более подробную информацию: каковы значения textureWidth и textureHeight. Покажите нам код, где вы загружаете растровые изображения текстур и код, где вы используете glTexSubmage. – Renard