2015-09-10 2 views
0

Я нашел this пример реализации фонаря молнии в hlsl. Это первый фрагмент, где я вижу, что странный синтаксис, где объявляются переменные в HLSL, как здесь:Странный способ объявления переменных в hlsl

float3 materialEmissive : EMISSIVE; 
float3 materialAmbient : AMBIENT; 

В обычной вместо EMISSIVE или AMBIENT я объявить позицию в регистре как:

float3 materialEmissive : register(c0); 
float3 materialAmbient : register(c1); 

Почему я бы объявлял переменные, как в примере из ссылки? Я проверил документацию DirectX, но не нашел, являются ли ключевые слова в hlsl EMMISIVE или AMBIENT.

ответ

1

В этом случае EMISSIVE и AMBIENT являются так называемой семантикой. Они описывают, что должна содержать эта переменная (а не там, где она хранится).

Компилятор шейдера может получить доступ к этой семантике, чтобы создать дескриптор переменной. Например. The Effect Framework и более ранние версии DirectX позволяют указывать глобальные переменные по их семантическому имени. Это отделяет реальную реализацию шейдера (т. Е. Имя переменной) от ее интерфейса до внешнего мира (т. Е. Семантики).

+0

Пример вышеприведенного примера не является примером [Стандартные аннотации и ссылки семантики DirectX] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb173004.aspx), который используется базовую структуру эффектов. Это может иметь определенный смысл в настраиваемом инструменте, но я уверен, что это бессмысленно, и компилятор HLSL просто переносит его как пользовательское семантическое имя. –

+0

Обратите внимание, что семантика, такая как '' EMISSIVE'' и '' WORLDVIEWPROJ'', имеет некоторое значение для устаревшего конвейера с фиксированной функцией Direct3D 9, но они не используются для Direct3D 10+ шейдеров или для программируемого конвейера Direct3D 9, когда вы обеспечивают как VS, так и PS. –

+0

Я не вижу твоей точки. Они определенно являются семантикой (которая может использоваться ['GetVariableBySemantic'] (https://msdn.microsoft.com/de-de/library/windows/desktop/ff476842 (v = vs.85) .aspx)). Я не сказал, что они запускают какое-то автоматическое поведение. –

Смежные вопросы