diff --git a/ComputeInputLayout.md b/ComputeInputLayout.md new file mode 100644 index 0000000..788f4a6 --- /dev/null +++ b/ComputeInputLayout.md @@ -0,0 +1,33 @@ +Returns the byte offsets for each element of an input layout and the implied vertex stride from a given Direct3D 11 input layout description. + + void ComputeInputLayout( + const D3D11_INPUT_ELEMENT_DESC* vbDecl, size_t nDecl, + uint32_t* offsets, uint32_t* strides ); + +# Parameters + +_vbDecl_: Input layout description, which is nDecl elements long. + +_offsets_: Must have nDecl elements of space. + +_strides_: Must have ``D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT`` of space. Can be nullptr. + +# Example + + const D3D11_INPUT_ELEMENT_DESC inputLayout[] = + { + { "SV_Position", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TANGENT", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "BLENDINDICES",0, DXGI_FORMAT_R8G8B8A8_UINT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "BLENDWEIGHT", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + }; + + uint32_t offsets[ D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT ]; + uint32_t strides[ D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT ]; + ComputeInputLayout( &inputLayout, 7, offsets, strides ); + + // strides[0] contains 60 + // offsets contains = { 0, 12, 24, 40, 44, 52, 56 }