Таким образом, сложная задача была разбита на несколько подзадач. После успешного завершения и тестирования одной подзадачи можно переходить к следующей.
8.1.3. Тестирование и повторение Иногда невозможно представить эффект, создаваемый шейдером, например, в процессе работы со сложными математическими функциями. В других случаях его вообще сложно представить - например, шум. В этом случае можно попробовать параметризовать алгоритм и систематически изменять входные параметры. Заметки, сделанные при изменении параметров и наблюдении вызванного этим эффекта, станут хорошими комментариями к исходному коду шейдера для тех, кому потом придется разбираться в нем, добавлять новые возможности и отлаживать.
После того как параметры для достижения нужного эффекта выбраны, можно упростить шейдер, убрав специально добавленные для отладки параметры и заменив их константами. Это сделает шейдер менее гибким, но более легким для понимания.
Разработка шейдера
8.1.4. Упрощение Про упрощение уже много говорилось в предыдущих главах. Простые шейдеры легче для понимания, их проще поддерживать. Обычно существует не один, а несколько алгоритмов, которые могут обеспечить нужный эффект. Выбран ли наиболее простой из них? Зачастую есть даже несколько способов реализации одного и того же алгоритма. Был ли выбран для реализации самый простой способ?
8.1.5. Модульность
Язык шейдеров OpenGL и его API поддерживает модульные шейдеры, так что можно воспользоваться их преимуществами. Придерживайтесь принципа «разделяй и властвуй»: лучше проектировать шейдер как набор маленьких простых модулей, которые будут работать совместно. Например, модули для вычисления освещения могут заменять друг друга и поддерживать как стандартные, так и дополнительно определенные источники освещения. Или есть несколько модулей - разных вариантов дымки. Если они правильно спроектированы, их можно смешивать и заменять один другим. Принцип модульности можно применять как для вершинных, так и для фрагментных шейдеров.