Directx 是否可以获取接口名称(动态着色器链接)?

Directx 是否可以获取接口名称(动态着色器链接)?,directx,shader,hlsl,Directx,Shader,Hlsl,我目前正在我的着色器反射代码中实现动态着色器链接。它工作得很好,但是为了使我的代码尽可能动态,我想自动化将偏移量输入DynamicClinkAgearray的过程。Microsoft在其示例中提出了类似的建议: g_iNumPSInterfaces = pReflector->GetNumInterfaceSlots(); g_dynamicLinkageArray = (ID3D11ClassInstance**) malloc( sizeof(ID3D11ClassInstance*

我目前正在我的着色器反射代码中实现动态着色器链接。它工作得很好,但是为了使我的代码尽可能动态,我想自动化将偏移量输入DynamicClinkAgearray的过程。Microsoft在其示例中提出了类似的建议:

g_iNumPSInterfaces = pReflector->GetNumInterfaceSlots(); 
g_dynamicLinkageArray = (ID3D11ClassInstance**) malloc( sizeof(ID3D11ClassInstance*) * g_iNumPSInterfaces );
if ( !g_dynamicLinkageArray )
    return E_FAIL;

ID3D11ShaderReflectionVariable* pAmbientLightingVar = pReflector->GetVariableByName("g_abstractAmbientLighting");
g_iAmbientLightingOffset = pAmbientLightingVar->GetInterfaceSlot(0);
我想在不给出确切名称的情况下更改此代码,因此当着色器更改时,我不必手动更改此代码。要实现这一点,我需要通过着色器反射获得我在下面标记的名称。这可能吗?我搜索了着色器反射的引用,但除了接口插槽GetNumInterfaceSlots的数量之外,没有找到任何有用的内容

如果这是不可能的,人们会怎么做呢?只要在那里添加我能想到的任何东西,这样我就可以尽可能少地手动更改


提前感谢

你可以使用GETVIALABLE BYEXTER来迭代所有的变量,然后使用ID3D11SodieRealCurrar变量上的GETSeC来检索名称/偏移……神圣JeBUS,我很吃惊,他们仍然在生产调用MALLC的C++样本。你好,20世纪80年代打电话来,他们想要回他们的代码!
#include "BasicShader_PSBuffers.hlsli"

iBaseLight     g_abstractAmbientLighting;
               ^^^^^^^^^^^^^^^^^^^^^^^^^^

struct PixelInput
{
    float4 position : SV_POSITION;
    float3 normals : NORMAL;
    float2 tex: TEXCOORD0;
};

float4 main(PixelInput input) : SV_TARGET
{
    float3 Ambient = (float3)0.0f;
    Ambient = g_txDiffuse.Sample(g_samplerLin, input.tex) * g_abstractAmbientLighting.IlluminateAmbient(input.normals);

    return float4(saturate(Ambient), 1.0f);
}