SharpDx получить переменную шейдера Имена Texture2D,SamplerState

Мне интересно, возможно ли получить имена переменных Texture2D и SamplerState. Я знаю, что смогу получить это через Framework эффектов. Но я ищу способ без этой рамки. Как и в случае с константбуферами (ShaderReflection). Я хочу сделать код HLSL, как это

   Texture2D tex0;
   Texture2D bg;

Кто-нибудь есть идея, как я мог бы получить доступ к VariableNames без EffectsFramework?

1 ответ

Решение

Хорошо, здесь все просто, сначала скомпилируйте свой шейдер, чтобы получить байт-код.

Затем создайте экземпляр ShaderReflection

byte[] yourbytecode;
SharpDX.D3DCompiler.ShaderReflection sr;
sr = new ShaderReflection(yourbytecode);

Чтобы узнать, сколько ресурсов связано:

int ResourceCount = sr.Description.BoundResources;

Затем, чтобы получить подробную информацию об этом:

InputBindingDescription desc = sr.GetResourceBindingDescription(index);

Он содержит имя, размерность и другие полезные данные.

Другие вопросы по тегам