Почему я не могу знать состояние источников света OpenGL в GLSL? - PullRequest
3 голосов
/ 03 июня 2009

Есть ли способ узнать, включен ли в GLSL источник света, который не включает передачу атрибутов или создание тонны различных шейдеров?

А как насчет использования NVidia C для графики (Cg)? Могу ли я сделать это с помощью Cg?

Теперь я убежден, что вы не можете этого сделать. Но теперь я спрашиваю: почему бы и нет?

Ответы [ 4 ]

6 голосов
/ 09 июля 2009

В соответствии с моим пониманием «Включить или не включать» часть Типичные ошибки GLSL это философская причина: шейдеры написаны так, чтобы переопределять фиксированный конвейер, поэтому они не должны полагаться на фиксированные состояния конвейера , Вы должны использовать разные шейдеры для каждой необходимой вам возможности.

Также я думаю, что это может быть выбор дизайна, основанный на том факте, что ветки на GPU стоят дорого, и кто-то должен был подумать, что вы не должны делать такие вещи, как

if (gl_LightSource[0].enabled)
{ ... }

на первом месте.

3 голосов
/ 06 июня 2009

unforgiven3 правильно - GLSL не предоставляет доступ к состояниям разрешения фиксированной трубы. Вы должны передать это как форму.

1 голос
/ 03 июня 2009

Если GLSL - это что-то вроде HLSL (эквивалент DirectX), что, как я подозреваю, так и есть, я думаю, что вы застряли с передачей атрибутов.

: - (

0 голосов
/ 24 июня 2009

Вы можете установить цвет источника света (0,0,0,0) и либо перейти на него, либо просто позволить ему зацикливаться на теперь не вносящих вклад источниках.

...