как применить шейдер к конкретному объекту - PullRequest
3 голосов
/ 26 апреля 2010

У меня есть несколько объектов на моей сцене. Я хочу применить свой шейдер только к одному из них. Среда: OpenGL 2.0, C ++, GLUT, GLEW.

Ответы [ 2 ]

6 голосов
/ 26 апреля 2010

Программа шейдера действует только до тех пор, пока она установлена. Только вызовы отрисовки, которые вы делаете во время установки программы, будут использовать шейдер. Вы должны установить шейдер, нарисовать объект и затем удалить шейдер.

Редактировать : Под "установкой" шейдера я подразумеваю использование glUseProgram с ручкой вашего шейдера. Под «удалением» я имею в виду либо установку другого шейдера, либо вызов glUseProgram с аргументом 0. См. glUseProgram . Отсюда и моя терминология "установка / удаление".

2 голосов
/ 26 апреля 2010

В вашем drawcall нарисуйте этот объект с помощью этого шейдера и нарисуйте другие без него ... на самом деле не может быть ничего проще; P Вы можете использовать перечисления в своем классе объектов, где вы можете указать шейдеры, которые включены для этот объект и пропускают их через этот шейдер только тогда, когда они должны ... конечно, если это полноэкранный пиксельный шейдер, тогда у вас проблемы, так как он обрабатывает каждый пиксель и отображает новое изображение для отображения. Если у вас нет способа передачи объекта в качестве параметра и алгоритма, чтобы применить изменения только в местоположении этого объекта.

...