В моем приложении для Android 4.3 я хотел бы загрузить текстуру из локального png в TextureView. Я не знаком с OpenGL и использую код из GLTextureActivity тест аппаратного ускорения. Я также вставляю сюда загрузочную часть текстуры:
private int loadTexture(int resource) {
int[] textures = new int[1];
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, textures, 0);
checkGlError();
int texture = textures[0];
glBindTexture(GL_TEXTURE_2D, texture);
checkGlError();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Bitmap bitmap = BitmapFactory.decodeResource(mResources, resource);
GLUtils.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bitmap, GL_UNSIGNED_BYTE, 0);
checkGlError();
bitmap.recycle();
return texture;
}
Я запускаю код на двух устройствах: Nexus 7 и телефоне Galaxy Nexus, и я заметил огромную разницу в скорости между ними. Для Nexus 7 рисование занимает около 170 мс, а для Galaxy Nexus — 459 мс. Самая трудоёмкая операция это загрузка текстуры и особенно вызов texImage2D
. Я читал, что есть устройства с чипами, которые медленно выполняют texImage2D
-texSubImage2D
функции, но как кто-то может определить, какие это устройства, и как мне избежать использования этих функций для достижения того же результата?
Заранее спасибо.
// РЕДАКТИРОВАТЬ: вызов glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
также кажется значительно медленнее в телефонном устройстве. Почему это происходит? Как я мог этого избежать?
glTexImage2D()
(github.com/google/grafika). В основном, чтобы иметь простой способ сравнить загрузку текстур RGBA 512x512 на разных устройствах. - person fadden   schedule 20.05.2014