微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

(HLSL, DirectX9) 为什么 GetConstantByName 返回空句柄?

如何解决(HLSL, DirectX9) 为什么 GetConstantByName 返回空句柄?

我正在将一些 GLSL 代码移植到 HLSL。由于其他人对我的限制,我仅限于 DirectX9 和顶点着色器 vs_2_0。

只是想掌握一些东西,我有一个非常简单的 HLSL 顶点着色器:

float4x4 gMyMatrix;
struct VS_OUTPUT
{
    float4 xyz : POSITION;
    float4 diffuse : COLOR0;
    float2 uv : TEXCOORD0;
};
VS_OUTPUT main(in float4 xyz : POSITION,in float4 diffuse : COLOR0,in float2 uv : TEXCOORD0)
{
    VS_OUTPUT Output;
    Output.xyz = mul(xyz,gMyMatrix);
    Output.diffuse=diffuse;
    Output.uv=uv;
    return Output;
}

如果我将 gMyMatrix 转换为寄存器,并按这种方式设置,一切都会按预期进行。但是,为了与 GLSL 的交叉兼容性,我想使用 GetConstantByName 查询 gMyMatrix。

我正在像这样编译我的着色器:

LPD3DXBUFFER aVshadercode=NULL;
ID3dxconstantTable* aConstants=NULL;
LPD3DXBUFFER aErrorList=NULL;
D3dxcompileShader(ShaderString,strlen(ShaderString),NULL,"main","vs_2_0",&aVshadercode,&aErrors,&aConstants);

一切都编译正常,但是当我尝试使用常量表检索 gMyMatrix 的句柄时,如下所示:

D3DXHANDLE aHandle=aConstants->GetConstantByName(NULL,"gMyMatrix");

我总是得到一个空句柄。 如前所述,如果我将 gMyMatrix 放入 register(c0) 并使用 SetVertexshaderconstantF 设置它,那么一切正常。但是为了兼容性和方便性,我想通过名称获取该句柄以这样设置。

有什么想法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。