135 lines
4.0 KiB
C++
135 lines
4.0 KiB
C++
#pragma once
|
|
#include "Window.h"
|
|
|
|
#include <d3d12.h>
|
|
#include <dxgi.h>
|
|
|
|
#include "Logger.h"
|
|
|
|
#include <dxgi1_4.h>
|
|
#include <DirectXColors.h>
|
|
|
|
#include "d3dx12.h"
|
|
|
|
#include "comdef.h"
|
|
#include "IDrawable.h"
|
|
|
|
#include <DirectXMath.h>
|
|
|
|
#include "Vertex.h"
|
|
#include "Cam.h"
|
|
|
|
#include "const_bufs.h"
|
|
|
|
namespace eg3d {
|
|
|
|
class DXWindow : public Window {
|
|
public:
|
|
static constexpr DXGI_FORMAT cBackBufferFormat = DXGI_FORMAT_R8G8B8A8_UNORM; // back buffer formátum
|
|
static constexpr UINT cSwapChainBufferCount = 2; // double buffering
|
|
static constexpr DXGI_FORMAT cDepthStencilFormat = DXGI_FORMAT_D24_UNORM_S8_UINT;
|
|
|
|
// TODO
|
|
private:
|
|
#if defined(DEBUG) | defined(_DEBUG)
|
|
ComPtr<ID3D12Debug> mDebugController; // debug vezérlõ
|
|
#endif
|
|
|
|
// TODO
|
|
ComPtr<ID3D12Device> mDevice; // device
|
|
ComPtr<IDXGIFactory1> mFactory; // DXGI factory
|
|
|
|
ComPtr<ID3D12Fence> mFence; // fence
|
|
ULONG64 mCurrentFence;
|
|
|
|
ComPtr<ID3D12CommandQueue> mCommandQueue; // command queue
|
|
ComPtr<ID3D12CommandAllocator> mCommandAllocator; // command allocator
|
|
ComPtr<ID3D12GraphicsCommandList> mCommandList; // command list
|
|
|
|
UINT mRTVDescSize, mDSVDescSize, mCBVSRVDescSize; // deszkriptorméretek
|
|
|
|
ComPtr<IDXGISwapChain> mSwapChain; // swap chain
|
|
|
|
ComPtr<ID3D12DescriptorHeap> mRtvDescriptorHeap; // render target view descriptor heap
|
|
ComPtr<ID3D12DescriptorHeap> mDsvDescriptorHeap; // DSV descriptor heap
|
|
|
|
ComPtr<ID3D12Resource> mSwapChainBuffer[cSwapChainBufferCount]; // swap chain bufferek
|
|
ComPtr<ID3D12Resource> mDepthStencilBuffer; // depth/stencil buffer
|
|
|
|
UINT mCurrentBackBuffer; // aktuális backbuffer
|
|
|
|
D3D12_VIEWPORT mViewPort; // viewport
|
|
D3D12_RECT mScissorRect; // scissor rect
|
|
|
|
protected:
|
|
// --- KIRAJZOLANDÓ OBJEKTUMOK
|
|
std::vector<Vertex> vertices; // vertexek
|
|
std::vector<uint32_t> indices; // indexek
|
|
|
|
ComPtr<ID3D12Resource> vertexBuffer; // vertex buffer
|
|
ComPtr<ID3D12Resource> indexBuffer; // index buffer
|
|
|
|
D3D12_VERTEX_BUFFER_VIEW vertexBufferView; // ...
|
|
D3D12_INDEX_BUFFER_VIEW indexBufferView;
|
|
|
|
std::vector<D3D12_INPUT_ELEMENT_DESC> inputElements; // input layout elemei
|
|
|
|
ComPtr<ID3D12RootSignature> rootSignature; // root signature
|
|
|
|
ComPtr<ID3D12PipelineState> pso; // pipeline state object
|
|
|
|
ComPtr<ID3DBlob> vertexShader, pixelShader; // vertex- és pixel-shader program
|
|
|
|
// TODO konstansbuffer példány és DX-objektum
|
|
ComPtr<ID3D12Resource> cbResource; // konstansbuffer DX-objektuma
|
|
ConstantBuffer constantBuffer; // konstansbuffer
|
|
|
|
// virtuális kamera
|
|
Cam * pCam;
|
|
|
|
void initDrawObjects(); // kirajzolandó objektumok inicializálása
|
|
|
|
void setupInputLayout(); // input layout beállítása
|
|
void loadShaders(); // shaderek betöltése
|
|
void createConstantBuffers(); // konstansbufferek létrehozása
|
|
void createRootSignature(); // root signature létrehozása
|
|
void createPSO(); // PSO létrehozása
|
|
|
|
void updateConstantBuffers(); // konstansbufferek frissítése
|
|
|
|
// --------------------
|
|
|
|
virtual void init(); // inicializáció
|
|
|
|
void createDevice(); // ...
|
|
void createSyncObjects(); // CPU-GPU szinkronizációs objektumok létrehozása
|
|
void queryDescriptorSizes(); // lekéri a descriptorok méretét
|
|
void createCommandObjects(); // command queue létrehozása
|
|
void createSwapChain(); // swap chain létrehozása
|
|
void createDescriptorHeaps(); // descriptor heap-ek létrehozása
|
|
void createRTVs(); // render target view-k létrehozása
|
|
void createDSV(); // depth/stencil létrehozása
|
|
void setViewPort(); // viewport beállítása
|
|
void setScissorRectangle(); // scissor rectangle beállítása
|
|
|
|
D3D12_CPU_DESCRIPTOR_HANDLE getCurrentBackBufferRTVHandle() const; // lekéri az aktuális backbuffer handle-jét
|
|
D3D12_CPU_DESCRIPTOR_HANDLE getDSVHandle() const; // lekéri az DSV handle-jét
|
|
ID3D12Resource * getCurrentBackBuffer() const; // lekéri az aktuális bakcbuffert
|
|
|
|
void flushCommandQueue(); // ...
|
|
public:
|
|
DXWindow();
|
|
virtual ~DXWindow();
|
|
|
|
// TODO paraméter átírása
|
|
void Draw(const DrawablePool &drawables);
|
|
|
|
ComPtr<ID3D12Device> getDevice() const; // device elkérése
|
|
|
|
void setCam(Cam * pCam); // kamera beállítása
|
|
|
|
|
|
};
|
|
}
|
|
|