DX12GraphicsApi.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #pragma once
  2. #include "DX12Buffer.h"
  3. #include "GraphicsApi.h"
  4. //! DirectX 12 Types
  5. struct ID3D12Debug;
  6. struct ID3D12Device5;
  7. struct ID3D12InfoQueue;
  8. struct ID3D12CommandQueue;
  9. struct IDXGISwapChain4;
  10. struct ID3D12DescriptorHeap;
  11. struct ID3D12Resource;
  12. struct ID3D12CommandAllocator;
  13. struct ID3D12Fence;
  14. struct D3D12_VIEWPORT;
  15. struct D3D12_VERTEX_BUFFER_VIEW;
  16. struct D3D12_INDEX_BUFFER_VIEW;
  17. struct ID3D12RootSignature;
  18. struct ID3D12PipelineState;
  19. struct ID3D12GraphicsCommandList4;
  20. struct D3D12_RAYTRACING_INSTANCE_DESC;
  21. namespace Framework
  22. {
  23. class DX12Buffer;
  24. class DX12DirectCommandQueue;
  25. class DX12CopyCommandQueue;
  26. class DX12ComputeCommandQueue;
  27. class DX12PixelShader;
  28. class DX12VertexShader;
  29. class DX12VertexBuffer;
  30. class DX12IndexBuffer;
  31. class DX12BLASModel;
  32. class TextureList;
  33. class TextureModel;
  34. class DX12TLAS;
  35. class DX12Texture;
  36. class DX12Pipeline;
  37. class DX12GlobalDescriptorHeap;
  38. class DX12ShaderBindingTable;
  39. class Model3D;
  40. class DX12ShaderHitGroup;
  41. class DX12ShaderFunction;
  42. class DirectX12 : public GraphicsApi
  43. {
  44. private:
  45. ID3D12Debug* debug;
  46. ID3D12Device5* device;
  47. ID3D12InfoQueue* infoQueue;
  48. DX12DirectCommandQueue* directCommandQueue;
  49. IDXGISwapChain4* swapChain;
  50. ID3D12Resource* backBuffer[2];
  51. int backBufferIndex;
  52. int tearing;
  53. D3D12_VIEWPORT* viewPort;
  54. tagRECT* allowedRenderArea;
  55. ID3D12RootSignature* signature;
  56. Mat4<float> matrixBuffer[MAX_KNOCHEN_ANZ];
  57. Mat4<float> viewAndProj[2];
  58. Vec3<float> kamPos;
  59. Texture* uiTexture;
  60. TextureList* texturRegister;
  61. DX12BLASModel** blasModels;
  62. DX12TLAS** worldTLAS;
  63. DX12ShaderBindingTable** worldShaderBindingTables;
  64. int lastTLASId;
  65. int lastModelId;
  66. DX12Texture* defaultRenderTarget;
  67. DX12Pipeline* pipeline;
  68. DX12GlobalDescriptorHeap* globalDescriptorHeap;
  69. DX12ShaderHitGroup* defaultHitGroup;
  70. DX12ShaderFunction* defaultRayGenerationShaderFunction;
  71. int* renderTargetInputOffset;
  72. int* tlasInputOffset;
  73. public:
  74. DLLEXPORT DirectX12();
  75. DLLEXPORT ~DirectX12();
  76. private:
  77. DLLEXPORT void updateBottomLevelAccelerationStructure();
  78. DLLEXPORT void renderKamera(
  79. Cam3D* zKamera, DX12Texture* zTarget, bool guiVisible);
  80. DLLEXPORT void initializePipeline();
  81. DLLEXPORT void initializeGlobalDescriptorHeap();
  82. DLLEXPORT void fillShaderBindingTable(
  83. DX12ShaderBindingTable* zShaderBindingTable,
  84. Model3D* zModel,
  85. int objectIndex);
  86. public:
  87. DLLEXPORT void initialize(NativeWindow* fenster,
  88. Vec2<int> backBufferSize,
  89. bool fullScreen) override;
  90. DLLEXPORT void beginFrame(
  91. bool fill2D, bool fill3D, int fillColor) override;
  92. DLLEXPORT void renderKamera(Cam3D* zKamera) override;
  93. DLLEXPORT virtual void renderKamera(
  94. Cam3D* zKamera, Texture* zTarget) override;
  95. //! TODO: DLLEXPORT void renderKamera( Cam3D* zKamera, Texture* zTarget
  96. //! ) override;
  97. DLLEXPORT void presentFrame() override;
  98. DLLEXPORT Texture* createOrGetTexture(
  99. const char* name, Image* b, TextureDirection dir) override;
  100. DLLEXPORT Image* zUIRenderImage() const override;
  101. DLLEXPORT virtual DXBuffer* createStructuredBuffer(int eSize) override;
  102. DLLEXPORT void setPipeline(DX12Pipeline* pipeline);
  103. DLLEXPORT static bool isAvailable();
  104. };
  105. } // namespace Framework