首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何反映hlsl结构成员的信息?

如何反映hlsl结构成员的信息?
EN

Stack Overflow用户
提问于 2013-07-24 17:19:27
回答 3查看 2.1K关注 0票数 1

在Directx 11中使用着色器反射,您可以通过调用

代码语言:javascript
复制
myVar = myCbuffer->GetVariableByName/Index  

但是,如果变量是一个struct对象,如何获取有关单个struct成员的信息?

请注意,我所讨论的不是效果框架,而是纯hlsl和反射API。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-25 21:23:16

变量的成员号存储在它的类型描述中。使用它来迭代它的成员使用GetMemberTypeByIndex

示例:

代码语言:javascript
复制
ID3D11ShaderReflectionConstantBuffer* cb = reflector->GetConstantBufferByIndex( cbIndex );
if ( cb )
{
    D3D11_SHADER_BUFFER_DESC cbDesc;
    cb->GetDesc( &cbDesc );
    if ( cbDesc.Type == D3D11_CT_CBUFFER )
    {
        for ( unsigned i = 0; i < cbDesc.Variables; ++i )
        {
            ID3D11ShaderReflectionVariable* var = cb->GetVariableByIndex( i );

            D3D11_SHADER_VARIABLE_DESC varDesc;
            var->GetDesc( &varDesc );

            ID3D11ShaderReflectionType* type = var->GetType();
            D3D11_SHADER_TYPE_DESC typeDesc;
            type->GetDesc( &typeDesc );

            for ( unsigned j = 0; j < typeDesc.Members; ++j )
            {
                ID3D11ShaderReflectionType* memberType = type->GetMemberTypeByIndex( j );
                D3D11_SHADER_TYPE_DESC memberTypeDesc;
                memberType->GetDesc( &memberTypeDesc );
            }
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2013-07-24 17:25:16

使用GetMemberByName (“如果效果变量是结构,则使用此方法按名称查找成员。”)。如果结构有"foo“成员,那么.

代码语言:javascript
复制
myCbuffer->GetVariableByName->GetMemberByName("foo")
票数 0
EN

Stack Overflow用户

发布于 2015-02-07 10:52:39

你可以用

代码语言:javascript
复制
ID3D11ShaderReflectionType::GetMemberTypeName 

此函数将返回CBuffer中结构的字段成员名。在开发HLSL反射程序时,我遇到了同样的问题。该函数经本人试用,得到了正确的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17840765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档