使用 DirectX 11 API 阅读 HLSL 语义和注释?
Reading HLSL semantics & annonations with DirectX 11 API?
我有一个着色器(在 .fx
文件中)有类似的部分(使用 SAS):
cbuffer UpdatePerObject : register(b1)
{
float4x4 worldViewIT : WorldViewInverseTranspose < string UIWidget = "MyName"; >;
float4x4 world : World < string UIWidget = "None"; >;
};
我正在使用 DirectX 11,我的程序是用 C++ 编写的。
不同的着色器需要不同的矩阵、纹理等。我想根据它们的语义和注释将它们设置为那些着色器。
我可以通过简单地手动解析 .fx
文件并寻找 : ... <...>
模式来做到这一点。 或者 DirectX 11 API 可能有一些专门的方法或途径。
手动额外阅读所有着色器以寻找语义和注释看起来有点过头了。
D3D11 的效果已从 DirectX SDK(现为 Windows SDK)移出并移至 GitHub、FX11.
上托管的开源项目中
要获得着色器的语义,您可以通过 D3D11Reflect 使用 D3D 着色器反射 API,它仍然是 SDK 的一部分。然而,这些 API 仅适用于 .hlsl 着色器,并不支持 FX 框架的所有附加功能。
我有一个着色器(在 .fx
文件中)有类似的部分(使用 SAS):
cbuffer UpdatePerObject : register(b1)
{
float4x4 worldViewIT : WorldViewInverseTranspose < string UIWidget = "MyName"; >;
float4x4 world : World < string UIWidget = "None"; >;
};
我正在使用 DirectX 11,我的程序是用 C++ 编写的。
不同的着色器需要不同的矩阵、纹理等。我想根据它们的语义和注释将它们设置为那些着色器。
我可以通过简单地手动解析 .fx
文件并寻找 : ... <...>
模式来做到这一点。 或者 DirectX 11 API 可能有一些专门的方法或途径。
手动额外阅读所有着色器以寻找语义和注释看起来有点过头了。
D3D11 的效果已从 DirectX SDK(现为 Windows SDK)移出并移至 GitHub、FX11.
上托管的开源项目中要获得着色器的语义,您可以通过 D3D11Reflect 使用 D3D 着色器反射 API,它仍然是 SDK 的一部分。然而,这些 API 仅适用于 .hlsl 着色器,并不支持 FX 框架的所有附加功能。