DX9 и DX10): что такое пиксельный (и вершинный) шейдер по умолчанию? (OpenGL тоже, если это возможно.) - PullRequest
3 голосов
/ 21 февраля 2011

Мне известно, что я могу по желанию указать шейдеры в DX9, и мне необходимо указать шейдер в DX10.У меня вопрос: что произойдет, если я скажу, что хочу использовать шейдер, но не указал его?Во фразе я ищу поведение по умолчанию.Есть ли шейдер по умолчанию?

Меня интересуют следующие сценарии:

  • DX10, не указывайте пиксельный шейдер.(Нужно ли вызывать PSSetShader (NULL)? Что если я не буду?) Какой шейдер по умолчанию будет работать?
  • Тот же вопрос, вершинный шейдер.
  • DX9, если яукажите, что я собираюсь использовать пиксельный шейдер, но затем не укажите, что произойдет?Есть ли дефолт?Есть ли значение по умолчанию, если я решу использовать интерфейс с фиксированной функцией?Это те же значения по умолчанию?
  • Бонусный вопрос: как насчет OpenGL и GLSL?Тот же вопрос, что и у DX9.

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

Спасибо!

1 Ответ

3 голосов
/ 21 февраля 2011

В версии OpenGL <= 2.x, если вы включаете шейдеры, но не предоставляете какой-либо код шейдера, стадия шейдера <em>неполная , и попытка отрисовки чего-либо просто вызовет ошибку.

В версии OpenGL> = 3 профиля ядра, поставка шейдеров обязательна. Без шейдера это та же самая ситуация, что и при включении шейдеров OpenGL-2, но шейдер не поставляется: Попытка отобразить что-то => ошибка. В OpenGL-3.x поведение профиля совместимости аналогично поведению OpenGL-2.x - шейдер по умолчанию не используется, поведение соответствует конвейеру фиксированных функций, который может быть описан шейдером, но фактический код шейдера не указан , Технически драйвер OpenGL-2.x для современного графического процессора создаст шейдер на месте, который соответствует текущей установленной конфигурации конвейера с фиксированными функциями.

...