【发布时间】:2017-02-22 10:44:41
【问题描述】:
我正在尝试编写一些 DirectX 代码,该代码采用已编译的着色器并使用反射自动为顶点着色器生成输入布局。我有一个简单的顶点着色器,旨在利用实例化,这是它接受的输入:
struct VertexIn
{
// Per-vertex data
float3 pos : POSITION;
float4 color : COLOR;
// Per-instance data
matrix worldMatrix : WORLDMATRIX;
};
如果我手写的话,我的布局应该是:
// Per-vertex data
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
// Per-instance data.
{ "WORLDMATRIX", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 2, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 3, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 }
当我反映编译的着色器时,我得到了正确数量的输入参数,但是当我尝试通过D3D11_SIGNATURE_PARAMTER_DESC 读取输入描述时,我找不到需要填写D3D11_INPUT_ELEMENT_DESC 成员@ 的详细信息987654327@、InputSlotClass 和InstanceDataStepRate?我是否查看了有关此信息的错误描述,或者无法通过反射获得实例详细信息?
如果这是不可能的,那么我猜我唯一的其他选择是传递预期的顶点输入布局并检查所有参数?
【问题讨论】:
标签: c++ reflection directx shader directx-11