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.
glGenTextures возвращает n текстурных имен в текстурах. Нет никакой гарантии, что имена образуют непрерывный набор целых чисел; однако гарантировано, что ни одно из возвращенных имен не использовалось непосредственно перед вызовом glGenTextures.
Мой вопрос в том, есть ли что-нибудь, что я могу вызвать в GL, который заставил бы текстуру "использовать" и не возвращать один и тот же идентификатор glHandle дважды?
Я не уверен, что это ошибка, которую я должен отправить на проблемы с libgdx?
Код Texture.java можно найти здесь для дальнейшего уточнения:
code.google.com/gdx/src/Texture.java
Любая помощь очень ценится!
Выявлена проблема:
Я вызывал Texture.dispose() из-за методов Screen.update() или Screen.render(), которые привели к этой ошибке:
вызывать OpenGL ES API без текущего контекста (регистрируется один раз на поток)
Переключение кода, которое будет выполняться из Screen.update, решило проблему.