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

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».

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

opengl.org / glGenTextures состояния:

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

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

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

На код Texture.java можно ссылаться здесь для дальнейшего разъяснения:

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

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

1 Ответ

1 голос
/ 16 июля 2011

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

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

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

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

...