LibGDX/OpenGL - проблема прозрачности glReadPixels
У меня проблема с glReadPixels/ScreenUtils.getFrameBufferPixmap(), где полупрозрачные спрайты, нарисованные поверх непрозрачных, кажется, "перезаписывают" прозрачность, что приводит к беспорядку.
Черные спрайты с прозрачностью 10% нарисованы поверх плиток в виде теней.
Оригинальное (внутриигровое) изображение:
Изображение, полученное с помощью glReadPixels в ScreenUtils.getFrameBufferPixmap (...):
(тени белые, потому что они слегка прозрачны)
Как сделать так, чтобы альфа-смешивание работало правильно в getFrameBufferPixmap()?
1 ответ
Вам нужно использовать glBlendFuncSeparate
вместо glBlendFunc
, который использует SpriteBatch. SpriteBatch предоставляет заднюю дверь (недокументированную, я думаю, по некоторым причинам) для использования glBlendFuncSeparate
, Установите для параметров функции смешивания значение -1, а затем вы можете вручную установить свой собственный glBlendFuncSeparate
это всегда оставляет альфа вашего кадрового буфера как 1.0:
spriteBatch.setBlendFunction(-1, -1);
Gdx.gl.glBlendFuncSeparate(
GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_ZERO, GL20.GL_ONE);
//...
spriteBatch.begin();
//...
spriteBatch.end();
Также убедитесь, что альфа вашего glClearColor
является 1.0f
,