Pull to refresh

Comments 7

Стоит добавить, что в libgdx все преобразования (поворот и прочее) реализует на шейдерах, включая работу с вьюпортом (вроде бы, не уверен), например. т.е. у каждого элемента уже присобачен внутри дефолтный шейдер, его стоит выдирать из ядра и дописывать, иначе поломается некоторая функциональность. Именно с этим и связаны зачастую ошибки, которые заставляют ставить pedantic = false поле.

Лично я поседел, пока не распотрошил все исходники libgdx и не понял почему у меня отваливается половина функционала при добавлении шейдера. Так что надеюсь эта информация будет для вас полезной.
Вполне закономерно: в libgdx есть готовый шейдер для рисования спрайтов в батч-режиме. Для этого SpriteBatch передает в этот шейдер определенные параметры, если поменять шейдер, то эти параметры не поменяются. Так что если хочется использовать SpriteBatch, нужно свой кастомный шейдер писать таким образом, чтобы он поддерживал предопределенные SpriteBatch-ем параметры. Или не использовать его, а использовать шейдеры напрямую.
Мне кажется, тема недостаточно раскрыта.
Во-первых, использование batch при рисовании скрывает особенности того, как это всё работает. Для понимания происходящего было бы полезно вручную задать юниформы, атрибуты и вызвать функцию рисования.
Во-вторых, описание вершинного шейдера тоже не способствует понимаю. Я бы посоветовал новичкам написать gl_Position = a_position; и поиграться с разными значениями атрибутов, чтобы хорошо представлять, как это всё работает. (от -1 до 1 по x и y, при этом координаты однородные и на самом деле используются значения x/w, y/w).
В принципе, если кому-то нужно — могу написать небольшую статью.
К слову о новичках в мире шейдеров, хоть и небольшой оффтоп, но мне очень сильно понравилась книга Коичи Мацуда в соавторстве с Роджером Ли: «WegGL: Программирование трёхмерной графики». Она по JS, но там для меня нашлось очень много полезной информации исключительно по шейдерам в мире OpenGL. Собственно по ней я и разбирался в шейдерах и устройстве libgdx (как бы это не комично звучало).
Было бы интересно прочитать об этом более подробно.Я специально использовал batch, чтобы не передавать атрибуты для вершин вручную, по моему это только путает и пугает на начальном этапе.Насчет юниформ, согласен, надо было выбрать другой шейдер хотя-бы с одной юниформой, я как-то не подумал об этом.
Sign up to leave a comment.

Articles