Code: Alles auswählen
template<typename VertexType>
class InputLayoutCreator
Code: Alles auswählen
struct Vertex {
DirectX::XMFLOAT3 position;
DirectX::XMFLOAT4 color;
DirectX::XMFLOAT3 normal;
DirectX::XMFLOAT2 texCoord;
};
struct VertexPosColor {
DirectX::XMFLOAT3 position;
DirectX::XMFLOAT4 color;
};
Code: Alles auswählen
InputLayoutCreator<Vertex> inputLayoutCreator(Engine::engine->Device.GetDevice());
InputLayoutCreator<VertexPosCol> inputLayoutCreatorPosCol(Engine::engine->Device.GetDevice());
Code: Alles auswählen
template<typename VertexType>
ID3D11InputLayout* CreateInputLayout(DWORD flags, const void* shaderBytecode, size_t bytecodeSize) {
std::vector<D3D11_INPUT_ELEMENT_DESC> layoutElements;
if (flags & D3DFVF_POSITION) {
layoutElements.push_back({ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 });
}
if (flags & D3DFVF_COLOR) {
layoutElements.push_back({ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(VertexType, color), D3D11_INPUT_PER_VERTEX_DATA, 0 });
}
if (flags & D3DFVF_NORMAL) {
layoutElements.push_back({ "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, offsetof(VertexType, normal), D3D11_INPUT_PER_VERTEX_DATA, 0 });
}
if (flags & D3DFVF_TEX1) {
layoutElements.push_back({ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, offsetof(VertexType, texCoord), D3D11_INPUT_PER_VERTEX_DATA, 0 });
}
ID3D11InputLayout* inputLayout = nullptr;
HRESULT hr = m_Device->CreateInputLayout(layoutElements.data(), layoutElements.size(), shaderBytecode, bytecodeSize, &inputLayout);
if (FAILED(hr)) {
Debug::Log("Fehler in Datei InputLayout.h");
}
return inputLayout;
}
Von der Idee das so wie oben beschrieben umzusetzen bin ich jetzt weg weil ich keine Lösung finden konnte, aber vielleicht hat jemand von Euch eine Idee um das flexibel zu gestallten?
Danke und VG Gombolo