Штабелируемые Cg-шейдеры - PullRequest
1 голос
/ 22 мая 2009

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

1 Ответ

2 голосов
/ 14 июня 2009

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

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

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

...