Почему я не могу узнать состояние индикаторов OpenGL в GLSL?

StackOverflow https://stackoverflow.com/questions/946622

  •  09-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

в первую очередь.

Другие советы

unforgiven3 прав: GLSL не предоставляет доступ к состояниям включения фиксированного канала.Вы должны сдать его как униформу.

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

:-(

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top