принудительно использовать SpriteBatch для переключения текстуры

#libgdx

#libgdx

Вопрос:

У меня проблема, которая, я думаю, из-за отсутствия переключателя текстуры. Вот мой метод рендеринга в псевдокоде

 spriteBatch.begin();
render stuff
spriteBatch.end();

setup shader with different texture
render some Meshes

spriteBatch.begin();
render stuff
spriteBatch.end();
  

Это приводит к очень странным результатам. Я думаю, проблема в том, что SpriteBatch изначально устанавливается текстура, затем шейдер изменяет эту текстуру, и когда SpriteBatch запускается следующий batch.begin() , он не вызывается switchTexture() просто потому, что он не знал, что текстура была изменена за это время.

Что я могу сделать, чтобы решить эту проблему? Есть ли способ сохранить текущую текстуру, отобразить сетки и восстановить предыдущую текстуру? Насколько я видел, нет способа сообщить SpriteBatch , что он должен вызывать switchTexture() .

Ответ №1:

SpriteBatch не переключается автоматически обратно на текстурный блок 0, поэтому вам придется вручную переключиться на него, если вы недавно переключились на какой-либо другой текстурный блок, чтобы связать несколько текстур для сетки.

Вызовите Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0); прямо перед spriteBatch.begin() этим, если вы использовали что-то с мультитекстурированием.

SpriteBatch не хранит ссылки на какие-либо текстуры за пределами begin() / end() block , но если вы оставили активную текстуру как нечто отличное от GL_TEXTURE0 , то, когда SpriteBatch переходит к привязке текстуры для спрайтов, которые вы пакуете, он привязывает ее к неправильному текстурному блоку, поэтому он будет рисовать спрайты с тем, что естьвсе еще сидит в GL_TEXTURE0 из одной из ваших недавних сеток.