【发布时间】:2014-01-12 03:30:03
【问题描述】:
我如何(如果可能的话)从反射中获取着色器中变量/结构成员的名称?
我说的是原始 hlsl 着色器(没有 effet 框架/没有 D3DX,只有原始 directX)。
我正在使用 SharpDX 并了解如何从着色器签名中获取我需要的大部分信息
new SharpDX.D3DCompiler.ShaderReflection(MyShaderByteCode);
我可以获得我需要的大部分信息,但是虽然我可以检索语义名称(TEXCOORD、POSITION 等),但我无法检索元素的实际名称(没有“名称”属性)。
我是不是走错了路?这甚至可能吗?
struct Vertex
{
float4 Position : POSITION;
float2 UVPosition : TEXCOORD;
};
struct Pixel
{
float4 Position : SV_POSITION;
float2 UVPosition : TEXCOORD;
};
float4x4 worldViewProj;
Texture2D<float4> diffuse : register(t0);
Texture2D<float4> height : register(t1);
Texture2D<float4> lightmap : register(t2);
SamplerState pictureSampler;
Pixel PerVertex(Vertex input)
{
Pixel output = (Pixel) 0;
input.Position.z += height.SampleLevel(pictureSampler, input.UVPosition, 0).r / 2;
output.Position = mul(input.Position, worldViewProj);
output.UVPosition = input.UVPosition;
return output;
}
float4 PerPixel(Pixel input) : SV_Target
{
return diffuse.Sample(pictureSampler, input.UVPosition) * lightmap.Sample(pictureSampler, input.UVPosition);
}
我能检索的是“POSITION”和“TEXCOORD”,我要检索的是“Position”和“UVPosition”
【问题讨论】:
标签: directx shader hlsl directx-11 sharpdx