From c836535da6e5b07f548ffd50c6b61d210b4e8d7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20Wiesner?= Date: Sun, 1 Mar 2020 18:57:50 +0100 Subject: [PATCH] Konstansbufferek benn --- DXWindow.cpp | 21 ++++++++++++++++----- DXWindow.h | 10 +++++++++- RUNTIME/shaders/basic_shader.hlsl | 7 ++++++- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/DXWindow.cpp b/DXWindow.cpp index 1dd64b3..2a111eb 100644 --- a/DXWindow.cpp +++ b/DXWindow.cpp @@ -1,6 +1,8 @@ #include "DXWindow.h" #include "IDrawable.h" +using namespace DirectX; + namespace eg3d { DXWindow::DXWindow() : Window(true) @@ -286,6 +288,7 @@ namespace eg3d { mCommandList->OMSetRenderTargets(1, &getCurrentBackBufferRTVHandle(), true, &getDSVHandle()); // TODO konstansbuffer bekötése + mCommandList->SetGraphicsRootConstantBufferView(0, cbResource->GetGPUVirtualAddress()); ////////// OBJEKTUMOK KIRAJZOLÁSA //drawObject(); @@ -295,8 +298,6 @@ namespace eg3d { drawables[i]->draw(mCommandList); } - // TODO drawables kirajzolása - ////////// mCommandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(getCurrentBackBuffer(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT)); @@ -410,19 +411,29 @@ namespace eg3d { void DXWindow::createConstantBuffers() { - // konstansbuffer létrehozása + cbResource = createBuffer_UH(mDevice, calc256AlignedSize(sizeof(constantBuffer))); } void DXWindow::updateConstantBuffers() { - // TODO konstansbuffer feltöltése + // transzformáció frissítése + //DirectX::XMStoreFloat4x4(&constantBuffer.transformMatrix, DirectX::XMMatrixScaling(2.0, 1.0, 1.0)); + DirectX::XMStoreFloat4x4(&constantBuffer.transformMatrix, DirectX::XMMatrixRotationZ(XM_PI)); + + bufferMapCopy(cbResource, static_cast(&constantBuffer), sizeof(constantBuffer)); } void DXWindow::createRootSignature() { // TODO root paraméterek megadása + + // root paraméterek létrehozása + CD3DX12_ROOT_PARAMETER slotParams[1]; + + // konstansbuffer-TÍPUS beállítása + slotParams[0].InitAsConstantBufferView(0); - CD3DX12_ROOT_SIGNATURE_DESC rsD(0, nullptr, 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); + CD3DX12_ROOT_SIGNATURE_DESC rsD(1, &slotParams[0], 0, nullptr, D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); ComPtr serializedRS = nullptr, errorBlob = nullptr; if (FAILED(D3D12SerializeRootSignature(&rsD, D3D_ROOT_SIGNATURE_VERSION_1, serializedRS.GetAddressOf(), errorBlob.GetAddressOf()))) diff --git a/DXWindow.h b/DXWindow.h index 1893670..eec32f7 100644 --- a/DXWindow.h +++ b/DXWindow.h @@ -14,6 +14,8 @@ #include "comdef.h" #include "IDrawable.h" +#include + // Vertex struktúrája struct Vertex { @@ -21,7 +23,11 @@ struct Vertex float r, g, b; }; -// TODO konstansbuffer típus +// konstansbuffer struktúrája +struct ConstantBuffer +{ + DirectX::XMFLOAT4X4 transformMatrix; +}; namespace eg3d { @@ -83,6 +89,8 @@ namespace eg3d { ComPtr vertexShader, pixelShader; // vertex- és pixel-shader program // TODO konstansbuffer példány és DX-objektum + ComPtr cbResource; // konstansbuffer DX-objektuma + ConstantBuffer constantBuffer; // konstansbuffer // TODO TRANSZFORMÁCIÓS TULAJDONSÁGOK void initDrawObjects(); // kirajzolandó objektumok inicializálása diff --git a/RUNTIME/shaders/basic_shader.hlsl b/RUNTIME/shaders/basic_shader.hlsl index dd82d71..67c3e83 100644 --- a/RUNTIME/shaders/basic_shader.hlsl +++ b/RUNTIME/shaders/basic_shader.hlsl @@ -10,11 +10,16 @@ struct VSOutput // vertex shader kimeneti strukt float3 color : COLOR; }; +cbuffer CBuf : register(b0) +{ + float4x4 transformMatrix; +}; + VSOutput vs_main(VSInput input) { VSOutput output; // vertex shader kimenete - output.position_H = float4(input.position_D, 1.0); + output.position_H = mul(transformMatrix, float4(input.position_D, 1.0)); output.color = input.color; return output;