Я нашел this пример реализации фонаря молнии в hlsl. Это первый фрагмент, где я вижу, что странный синтаксис, где объявляются переменные в HLSL, как здесь:Странный способ объявления переменных в hlsl
float3 materialEmissive : EMISSIVE;
float3 materialAmbient : AMBIENT;
В обычной вместо EMISSIVE
или AMBIENT
я объявить позицию в регистре как:
float3 materialEmissive : register(c0);
float3 materialAmbient : register(c1);
Почему я бы объявлял переменные, как в примере из ссылки? Я проверил документацию DirectX, но не нашел, являются ли ключевые слова в hlsl EMMISIVE
или AMBIENT
.
Пример вышеприведенного примера не является примером [Стандартные аннотации и ссылки семантики DirectX] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb173004.aspx), который используется базовую структуру эффектов. Это может иметь определенный смысл в настраиваемом инструменте, но я уверен, что это бессмысленно, и компилятор HLSL просто переносит его как пользовательское семантическое имя. –
Обратите внимание, что семантика, такая как '' EMISSIVE'' и '' WORLDVIEWPROJ'', имеет некоторое значение для устаревшего конвейера с фиксированной функцией Direct3D 9, но они не используются для Direct3D 10+ шейдеров или для программируемого конвейера Direct3D 9, когда вы обеспечивают как VS, так и PS. –
Я не вижу твоей точки. Они определенно являются семантикой (которая может использоваться ['GetVariableBySemantic'] (https://msdn.microsoft.com/de-de/library/windows/desktop/ff476842 (v = vs.85) .aspx)). Я не сказал, что они запускают какое-то автоматическое поведение. –