Несколько эффектов в шейдере - PullRequest
1 голос
/ 06 июня 2011

Мой вопрос имеет небольшое основание в GLSL, так как это мой язык затенения, который я знаю.

Мое мнение, что шейдеры и программируемый графический конвейер - огромный шаг вперед по сравнению с конвейером с фиксированными функциями. Шейдеры превосходно применяют эффекты и делают 3D-графику более реалистичной. Однако не каждый эффект должен применяться к каждому сценарию. Например, я бы не хотел, чтобы эффект развевания флага использовался во всей сцене. Если эта сцена содержит один флаг, я хочу, чтобы этот флаг махал взад-вперед и на этом все. Я хотел бы, чтобы эффект воды применялся только к воде. Вы поняли идею.

Мой вопрос заключается в том, как лучше всего реализовать это переключение эффектов. Единственный способ, которым я могу придумать, - это иметь ряд однородных переменных и включать / выключать их до и после рисования чего-либо.

Например, (Псевдокод)

toggle flag effect uniform
draw flag
untoggle flag effect uniform

Внутри кода шейдера он проверит значение этих униформ и будет действовать соответственно.

РЕДАКТИРОВАТЬ: Я понимаю, что можно иметь несколько шейдерных программ и включать их использование по мере необходимости, но будет ли это на самом деле быстрее, чем описанный выше метод, или приведет к серьезным накладным расходам производительности из-за перемещения всех этих данных в графическом процессоре? Казалось бы, что сделать это несколько раз за кадр будет чрезвычайно дорого

...