#pragma once #include "DX12Buffer.h" #include "GraphicsApi.h" //! DirectX 12 Types struct ID3D12Debug; struct ID3D12Device5; struct ID3D12InfoQueue; struct ID3D12CommandQueue; struct IDXGISwapChain4; struct ID3D12DescriptorHeap; struct ID3D12Resource; struct ID3D12CommandAllocator; struct ID3D12Fence; struct D3D12_VIEWPORT; struct D3D12_VERTEX_BUFFER_VIEW; struct D3D12_INDEX_BUFFER_VIEW; struct ID3D12RootSignature; struct ID3D12PipelineState; struct ID3D12GraphicsCommandList4; namespace Framework { class DX12Buffer; class DX12DirectCommandQueue; class DX12CopyCommandQueue; class DX12ComputeCommandQueue; class DX12PixelShader; class DX12VertexShader; class DX12VertexBuffer; class DX12IndexBuffer; class DX12BLASModel; class TextureList; class TextureModel; class DirectX12 : public GraphicsApi { private: ID3D12Debug* debug; ID3D12Device5* device; ID3D12InfoQueue* infoQueue; DX12DirectCommandQueue* directCommandQueue; DX12CopyCommandQueue* copyCommandQueue; DX12ComputeCommandQueue* computeCommandQueue; IDXGISwapChain4* swapChain; ID3D12DescriptorHeap* rtvHeap; ID3D12DescriptorHeap* dsvHeap; ID3D12DescriptorHeap* shaderBufferHeap; ID3D12Resource* depthBuffer; ID3D12Resource* backBuffer[2]; int backBufferIndex; int tearing; D3D12_VIEWPORT* viewPort; tagRECT* allowedRenderArea; D3D12_VERTEX_BUFFER_VIEW* vertexBufferView; D3D12_INDEX_BUFFER_VIEW* indexBufferView; ID3D12RootSignature* signature; ID3D12PipelineState* pipeline; Mat4 matrixBuffer[MAX_KNOCHEN_ANZ]; Mat4 viewAndProj[2]; Vec3 kamPos; TextureModel* texturModel; Texture* uiTexture; TextureList* texturRegister; DX12VertexShader* vertexShader; DX12PixelShader* pixelShader; DX12BLASModel** blasModels; DX12Buffer* blasScratchBuffer; DX12Buffer* blasResultBuffer; int lastModelId; DLLEXPORT void updateBottomLevelAccelerationStructure(); public: DLLEXPORT DirectX12(); DLLEXPORT ~DirectX12(); DLLEXPORT void initialize(NativeWindow* fenster, Vec2 backBufferSize, bool fullScreen) override; DLLEXPORT void beginFrame( bool fill2D, bool fill3D, int fillColor) override; DLLEXPORT void renderKamera(Cam3D* zKamera) override; DLLEXPORT virtual void renderKamera( Cam3D* zKamera, Texture* zTarget) override; //! TODO: DLLEXPORT void renderKamera( Cam3D* zKamera, Texture* zTarget //! ) override; DLLEXPORT void presentFrame() override; DLLEXPORT Texture* createOrGetTexture( const char* name, Image* b) override; DLLEXPORT Image* zUIRenderImage() const override; DLLEXPORT virtual DXBuffer* createStructuredBuffer(int eSize) override; DLLEXPORT static bool isAvailable(); }; } // namespace Framework