Intereting Posts
Как сохранить приложение «Кордова» в полноэкранном режиме при открытии клавиатуры Android? Создание элемента MembersInjector для . Предпочитают вместо этого запускать процессор кинжала над этим классом Для чего используется ids.xml? Не останавливайте анимацию в списке Android липкий заголовок RecyclerView / заголовок раздела RecyclerView Класс видеоредактора Android Android: создать круговое изображение с пикассо Не удалось разрешить com.android.support:appcompat-v7:22 и com.android.support:recyclerview-v7:21.1.2 Поддержка PAC отключена, поскольку нет реализации системы Создание Android от источника – эмулятора и AVD Как получить объект Date в формате «YYYY-MM-DD» в android Как установить растровое изображение из ресурса Отсутствующие стили. Правильная ли тема выбрана для этого макета? Ошибка «Package R не существует» при создании с помощью Gradle из командной строки Карты Google на Android не работают над приложением, но демо в порядке

Угроза текстуры Android opengl

У меня возникают проблемы с повреждением текстуры на эмуляторе Android (он отлично работает на большинстве устройств Android).

Отправка ссылок на Android 4.1

На картинке выше представлен референтный рендеринг, созданный эмулятором под управлением Android 4.1 Jelly Bean, все выглядит так, как должно.

Android 1.6

Второе изображение снимается в эмуляторе под управлением Android 1.6. Обратите внимание на повреждение некоторых отключенных кнопок панели инструментов (они отображаются с цветом 1f, 1f, 1f, 0.5f)

Android 1.6

Третье изображение снимается в одном и том же эмуляторе. Разница в том, что теперь оценка отображается в верхнем правом углу. Оценка – это растровый шрифт, текстура – альфа-маска. Все сделанное после того, как оценка теряет свою текстуру. Обратите внимание, что предыдущий скриншот также содержал растровый шрифт, сделанный таким же образом (но с использованием другой текстуры).

Аналогичная проблема возникла на одном из устройств Samsung (я не помню модель). Когда текстура пола была визуализирована, все отображалось после этой утраченной текстуры. Проблема не проявилась, когда я либо а) не привязывал текстуру; б) связал текстуру, но не использовал треугольники, используя ее. C) воссоздал объект png с нуля.

Настройки Opengl:

gl.glDisable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_CULL_FACE); gl.glDisable(GL10.GL_DEPTH_TEST); gl.glDisable(GL10.GL_DITHER); gl.glDepthMask(false); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glBlendFunc(GL10.GL_ONE,GL10.GL_ONE_MINUS_SRC_ALPHA); gl.glShadeModel(GL10.GL_FLAT); gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_MODULATE); 

Как загружаются текстуры:

 public void doGLLoading(Engine renderer) { GL10 gl=renderer.getGl(); int[] ids=new int[1]; gl.glGenTextures(1, ids,0); id=ids[0]; gl.glBindTexture(GL10.GL_TEXTURE_2D, id); Log.d("SpriteDraw", String.format("Texture %s has format %s",getPath(),bitmap.getConfig().toString())); buildMipmap(gl, bitmap); gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER, minFilter); gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER, magFilter); gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_S, textureWrapS); gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_T, textureWrapT); } private void buildMipmap(GL10 gl, Bitmap bitmap) { int level = 0; int height = bitmap.getHeight(); int width = bitmap.getWidth(); while (height >= 1 || width >= 1) { // First of all, generate the texture from our bitmap and set it to // the according level //TextureUtils.texImage2D(gl, GL10.GL_TEXTURE_2D, level, -1, bitmap, -1, 0); GLUtils.texImage2D(GL10.GL_TEXTURE_2D, level, bitmap, 0); if (height == 1 || width == 1) { break; } // Increase the mipmap level level++; height /= 2; width /= 2; Bitmap bitmap2 = Bitmap.createScaledBitmap(bitmap, width, height, true); // Clean up bitmap.recycle(); bitmap = bitmap2; } } 

Примечания: шрифт отображается с помощью gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); И GL10.glDrawArrays . Коррупция влияет не только на эмулятор 1.6, но и на серию 2.x android, хотя это не так заметно (альфа-маски все еще отображаются неправильно). Все активы правильно загружаются как мощность двух растровых изображений.

Solutions Collecting From Web of "Угроза текстуры Android opengl"

  1. Я предлагаю использовать 32-битные текстуры, а не оттенки серого, а не «альфа-маски» (что это?)
  2. Проверьте размер вашей текстуры, он не должен превышать максимальный размер (glGetInteger (GL_MAX_TEXTURE_SIZE). Также сделайте так, чтобы ваши текстуры были равны 2. Да, вы упомянули это раньше, но если они находятся в масштабируемых активах (папки drawable_x_dpi), они Будут масштабироваться андроидом. Чтобы избежать масштабирования, поместите их в «сырую» папку.
  3. Для тестирования попробуйте отключить всю фильтрацию, включая mipmaps – установите GL_TEXTURE_WRAP_S и GL_TEXTURE_WRAP_T в GL_NEAREST