Шейдеры решают всё: Почему без GLSL ваш движок не выживет в WebGL

А вы что думали? Это так!😱

Всем привет! Как указано в заголовке, без этих маленьких программ (шейдеров) вы ничего не нарисуете в браузере! Оказалось, что в новых версиях и DirectX, и OpenGL тоже без них никуда. Я удивлён! Движки настолько скрыли от нас тонкости работы, что даже не подозреваешь, как это устроено. Да и многим этого не нужно.

Поэтому, если захотите писать свой движок/рендер, вам нужно обязательно изучать:

  1. Язык, на котором хотите разрабатывать движок.
  2. Язык GLSL для шейдеров.

И это не просто создание простых шейдеров. Через них в WebGL, например, принято отрисовывать спрайты: позиция, вращение, размер, текстура — всё это задаётся в шейдерах. Вы лишь передаёте значения, а все вычисления трансформаций происходят там же.

А теперь представьте: вы хотите применить эффект к спрайту через шейдер. Но за один раз к текстуре можно применить только одну шейдерную программу. Что делать?

  • Вариант 1: Расширить базовый шейдер, чтобы помимо стандартных операций он применял и нужный эффект.
  • Вариант 2: Сначала отрисовать все спрайты в текстуру, а затем применить эффект отдельной программой (здесь пригодится Framebuffer).

И всё это нужно учитывать!

Тут, конечно, снова восхищаешься большими движками — как они маскируют такую рутину от пользователя. Но зато становится понятно, почему их легко «сломать» или замедлить.