2009-05-21 4 views
1

В моем моторе я загружаю Cg-шейдеры из пар файлов вершинного/пиксельного шейдера. Я хотел бы иметь возможность складывать шейдеры, чтобы объединить их (освещение + материал и т. Д.). Не дожидаясь разбиения шейдеров на отдельные функции, а затем создавая из них одну строковую строку шейдера, знаете ли вы какие-либо хорошие способы укладки разных шейдеров в Cg?Stacking Cg shaders

ответ

2

Это звучит немного похоже на то, что вы хотите, подобно функции динамического шейдерного соединения в DirectX 11? Функция интерфейса Cg позволяет вам выполнять simlar вещи. Это позволяет вам переконфигурировать шейдеры, чтобы вы могли легко и чисто делать такие вещи, как изменение способа подсчета освещения или изменение типа материала.

Например, скажем, что вы хотите написать шейдер, но должны иметь возможность изменить способ подсчета освещения. Вы можете определить интерфейс Light, который имеет функцию, которая каким-то образом рассчитает свет. В другом месте вы реализуете интерфейс Light как, например, CoolLight и UberLight. Во время выполнения вы можете указать, какая реализация интерфейса Light должна использоваться, почти так же, как вы указываете другие параметры.

Чтобы узнать, что вы хотите, я рекомендую посмотреть руководство пользователя Cg (http://developer.download.nvidia.com/cg/Cg_2.2/CgUsersManual.pdf). Если вы ищете «Общие параметры и интерфейсы», то есть небольшой пример.