OpenGL батчинг и глюк с прозрачностью
Незнаю в какой раздел писать, т.к. вопрос чисто по 2D графике, opengl.
Вобщем экспериментировав с opengl решил сделать вывод спрайтов с батчингом.
Для начала сделал тупо сбор последовательностей спрайтов с одинаковой текстурой и блендингом в vbo и его выводом с перезапиранием, если появлялся неподходящий спрайт.
Для партикловой системы, где всегда имеем много однотипных спрайтов, еще сойдет, но для реальной игровой ситуации уже профит сомнительный (точнее надо самому следить за группировкой спрайтов и т.п. чтобы такой батчинг был выгодным).
Решил сначала группировать спрайты по разным vbo. Сразу проблема - что делатьс порядком вывода, ведь после перегруппировки он теряется. Решаю, заюзав depth-test, в z координату записываю порядок в виде удаленности (т.к. проекция ортографическая, на отображение не влияет).
Теперь еще одна проблема с прозрачностью. У спрайтов с "нарушеной" последовательностью вывода, альфа-канал "затирает" все что под ним, на скрине это хорошо видно у спрайта 3 (цифрами отмечен порядок вывода)
бленд стандартный (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), depth-func GL_LEQUAL
Как от него избавиться?
|