LibGdx (OpenGl ES / Android) - Многократный вызов Texture.createGLHandle возвращает textureid вновь созданной текстуры, перезаписывая ее

1

Android 2.1 - Eclipse

Какие шаги воспроизведут проблему?

1.

Create new Texture(managed) using new Texture(FileHandle, Format, bool);
 - glGenTextures is called
 - glHandle is created (Logcat: 100271) "bg_plainred.png"
 - uploadImageData calls glBindTexture(100271)

Create new Texture(managed) using new Texture(FileHandle, Format, bool);
 - glGenTextures is called
 - glHandle is created (Logcat: 315638026) "body2.png"
 - uploadImageData calls glBindTexture(315638026)

На этом этапе все текстурированные спрайты корректно отображают..

2.

Call Texture.dispose(); "bg_plainred.png"
 - glDeleteTextures(glHandle) (Logcat: glHandle = 100271)

3.

Create new Texture(managed) using new Texture(FileHandle, Format, bool);
 - glGenTextures is called
 - glHandle is created (Logcat: 100271) "bg_wallpaper.png"
 - uploadImageData calls glBindTexture(100271)


Create new Texture(managed) using new Texture(FileHandle, Format, bool);
 - glGenTextures is called
 - glHandle is created (Logcat: 100271) "clothes.png"
 - uploadImageData calls glBindTexture(100271)

Таким образом, createGLHandle() возвращает 100271 дважды по существу, переписывая bg_wallpaper.png с помощью clothes.png. Если я попытаюсь ссылаться на текстуру "bg_wallpaper" в Sprite, она, очевидно, записывается с "clothes.png".

Если я заставляю потеря контекста и переориентацию, все текстуры правильны из-за перезагрузки (управления) текстурами с помощью Gdx.

opengl.org/glGenTextures:

glGenTextures возвращает n текстурных имен в текстурах. Нет никакой гарантии, что имена образуют непрерывный набор целых чисел; однако гарантировано, что ни одно из возвращенных имен не использовалось непосредственно перед вызовом glGenTextures.

Мой вопрос в том, есть ли что-нибудь, что я могу вызвать в GL, который заставил бы текстуру "использовать" и не возвращать один и тот же идентификатор glHandle дважды?

Я не уверен, что это ошибка, которую я должен отправить на проблемы с libgdx?

Код Texture.java можно найти здесь для дальнейшего уточнения:

code.google.com/gdx/src/Texture.java

Любая помощь очень ценится!

  • 0
    Вы спрашивали здесь? badlogicgames.com/forum/viewforum.php?f=11
  • 0
    Готово! Спасибо, не понял, что там было.
Теги:
libgdx
opengl-es

1 ответ

1
Лучший ответ

Выявлена проблема:

Я вызывал Texture.dispose() из-за методов Screen.update() или Screen.render(), которые привели к этой ошибке:

вызывать OpenGL ES API без текущего контекста (регистрируется один раз на поток)

Переключение кода, которое будет выполняться из Screen.update, решило проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню