당신은 hlsl 구조체 멤버에 대한 정보를 반영하는 방법? 다이렉트 X 11에서 쉐이더 반사를 사용
myVar = myCbuffer->GetVariableByName/Index
그러나 변수가 구조체의 객체 인 경우, 어떻게 각각의 구조체 멤버에 대한 정보를 얻을 수
를 호출하여 개별 변수에 대한 정보를 얻을 수 있나요?효과 프레임 워크가 아니라 순수한 hlsl 및 리플렉션 API에 대해 설명하고 있습니다.
당신은 hlsl 구조체 멤버에 대한 정보를 반영하는 방법? 다이렉트 X 11에서 쉐이더 반사를 사용
myVar = myCbuffer->GetVariableByName/Index
그러나 변수가 구조체의 객체 인 경우, 어떻게 각각의 구조체 멤버에 대한 정보를 얻을 수
를 호출하여 개별 변수에 대한 정보를 얻을 수 있나요?변수의 멤버 번호가 형식 설명에 저장됩니다. GetMemberTypeByIndex을 사용하여 멤버를 반복 할 때 사용합니다.
예 :
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);
}
}
}
}
GetMemberByName
("효과 변수가 구조체 인 경우이 메서드를 사용하여 이름을 기준으로 멤버를 찾습니다.")를 사용하십시오. 구조체에 "foo"멤버가있는 경우 ...
myCbuffer->GetVariableByName->GetMemberByName("foo")
리플렉션 API에서 어떤 이유로 GetMemberByName 함수를 사용할 수없는 것 같습니다. (나는 내가 말하고자하는 바를 명확히하기 위해 나의 질문을 편집했다.) – Kloda
당신은
ID3D11ShaderReflectionType::GetMemberTypeName
이 기능의 의지가 CBuffer에서 구조체의 필드 멤버 이름을 반환 사용할 수 있습니다. HLSL 리플렉션 프로그램을 개발할 때 같은 질문을합니다. 이 기능은 나 혼자 시도되어 올바른 결과를 얻습니다.
좋아,하지만 이것은 내가 필요로하는 회원의 이름이나 크기에 대한 정보를주지 않을 것이다. – Kloda
GetMemberTypeName()은 멤버의 이름을 반환합니다. 크기는 멤버 유형 설명에서 파생 될 수 있습니다. 가장 간단한 방법은 오프셋 (Offset) 필드를 사용하는 것입니다. –
알겠습니다. 유형 이름이 반환 된 줄 알았는데. 오프셋 필드에 대한 좋은 아이디어. – Kloda