Предлагаю, очевидные и не очень, моменты отличия шейдинга под мобилу вести в данном сабже.
Я постараюсь во 2-ом пункте, собрать и резюмировать отличия в виде пунктов.
Общие рекомендации.
Прозрачность.
Циклы.
Tiled rendering Vs depth beffer?
С циклами вопрос:
Насколько они нежелательны в шейдах, до оформления, обязательно ли параметры цикла выносить в константу?
const int N; for (int i=0; i<N; i++) {...
и где константу определять, в теле функции или глобально?
что насчет float? const float N;
Zamir
Компилятор раскручивает такой цикл в повторяющиеся блоки. По этому это эквивалентно копипасте кода. Производительность зависит от тяжести вычислений внутри цикла.
GLoom
> в повторяющиеся блоки
Хмм, и даже не в функцию... Стало быть лучше оформлять их в шейдере сразу как функцию
Zamir
Ну эта... Функции инлайнятся насколько я знаю. То есть в конечном коде скомпилированного шейдера нет вызовов функций.
GLoom
> Функции инлайнятся
Жесть
Zamir
> 1) Указывайте все opaque (полупрозрачное) в render pass.
https://translate.google.com/#en/ru/opaque
> 2) Избегайте discard в фрагментном шейдере. При острой необходимости рендерим их после opaque и до transparent.
discard сейчас более менее кстати. А вот запись в gl_FragDepth очень чревата.
> 3) transparent/blended отрисовываем в последнюю очередь.
А это собственно для всех GPU справедливо, а не только для мобилок.
MrShoor
> https://translate.google.com/#en/ru/opaque
У нас нет аналога перевода opaque, т.к. нет понятия степень непрозрачности, потому решил остановиться на (полупрозрачное), может глубоко заблуждаюсь)
MrShoor
> discard сейчас более менее
Сейчас телефоны лучше справляются с этим или как? Ведь речь идет об ES 2.0
Меня очень волнует вопрос с таймером, так как он никуда не годится в том виде что есть в 2.0, по крайней мере.
Суть в том, что анимация - в том или ином виде подвязана к таймеру, а этот float на мобильнике рассыпается на глазах,
в виду своей неточности вычислений, примерно с 10-ой секунды.
Кто сталкивался и какой выход для себя обнаружил, поделитесь пожалуйста.
Zamir
Opaque - не прозрачное, т.е. цельное.
GLoom
> Opaque - не прозрачное
Ок, принял
> MrShoor
Спутал по ходу с opacity, в общем бзик...
Zamir
И на всякий случай opacity - степень непрозрачности. Наверное из за этого возникла путаница.
Тема в архиве.