#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 из одной из ваших недавних сеток.