DX12GraphicsApi.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #pragma once
  2. #include "DX12Buffer.h"
  3. #include "GraphicsApi.h"
  4. //! DirectX 12 Types
  5. #define DEFAULT_MAX_TRANSPARENT_HITS 5
  6. struct ID3D12Debug;
  7. struct ID3D12Device5;
  8. struct ID3D12InfoQueue;
  9. struct ID3D12CommandQueue;
  10. struct IDXGISwapChain4;
  11. struct ID3D12DescriptorHeap;
  12. struct ID3D12Resource;
  13. struct ID3D12CommandAllocator;
  14. struct ID3D12Fence;
  15. struct D3D12_VIEWPORT;
  16. struct D3D12_VERTEX_BUFFER_VIEW;
  17. struct D3D12_INDEX_BUFFER_VIEW;
  18. struct ID3D12RootSignature;
  19. struct ID3D12PipelineState;
  20. struct ID3D12GraphicsCommandList4;
  21. struct D3D12_RAYTRACING_INSTANCE_DESC;
  22. namespace Framework
  23. {
  24. class DX12Buffer;
  25. class DX12DirectCommandQueue;
  26. class DX12CopyCommandQueue;
  27. class DX12ComputeCommandQueue;
  28. class DX12PixelShader;
  29. class DX12VertexShader;
  30. class DX12VertexBuffer;
  31. class DX12IndexBuffer;
  32. class DX12BLASModel;
  33. class TextureList;
  34. class TextureModel;
  35. class DX12TLAS;
  36. class DX12Texture;
  37. class DX12Pipeline;
  38. class DX12GlobalDescriptorHeap;
  39. class DX12ShaderBindingTable;
  40. class Model3D;
  41. class DX12ShaderHitGroup;
  42. class DX12ShaderFunction;
  43. class Cam3D;
  44. class DX12BLAS;
  45. class DX12SamplerState;
  46. class World3D;
  47. class DX12Texture;
  48. struct RayGenerationSettings
  49. {
  50. int renderGui;
  51. int useRays;
  52. float minDistance;
  53. float maxDistance;
  54. Mat4<float> inverseView;
  55. Mat4<float> inverseProjection;
  56. };
  57. class DirectX12 : public GraphicsApi
  58. {
  59. private:
  60. ID3D12Debug* debug;
  61. ID3D12InfoQueue* infoQueue;
  62. IDXGISwapChain4* swapChain;
  63. ID3D12Resource* backBuffer[2];
  64. int backBufferIndex;
  65. int tearing;
  66. Mat4<float> matrixBuffer[MAX_KNOCHEN_ANZ];
  67. Mat4<float> viewAndProj[2];
  68. Vec3<float> kamPos;
  69. TextureList* texturRegister;
  70. DX12BLASModel** blasModels;
  71. DX12TLAS** worldTLAS;
  72. DX12ShaderBindingTable** worldShaderBindingTables;
  73. int lastTLASId;
  74. int lastModelId;
  75. Cam3D* defaultKamera;
  76. int cameraCount;
  77. Critical cs;
  78. protected:
  79. DX12Texture* defaultRenderTarget;
  80. DX12Texture* uiTexture;
  81. DX12Buffer* rayGenSettingsBuffer;
  82. RayGenerationSettings settings;
  83. ID3D12Device5* device;
  84. DX12DirectCommandQueue* directCommandQueue;
  85. PFN_D3D12_SERIALIZE_ROOT_SIGNATURE pfnD3D12SerializeRootSignature;
  86. DX12Pipeline* pipeline;
  87. DX12GlobalDescriptorHeap* globalDescriptorHeap;
  88. DX12GlobalDescriptorHeap* samplerDescriptorHeap;
  89. DX12ShaderHitGroup* defaultHitGroup;
  90. DX12ShaderFunction* defaultRayGenerationShaderFunction;
  91. DX12SamplerState* defaultSamplerState;
  92. int* sbtTextureIdBufferOffset;
  93. int* sbtIndexBufferOffset;
  94. int* sbtVertexDataBufferOffset;
  95. int* sbtPolygonSizeBufferOffset;
  96. int firstTextureHeapIndex;
  97. int* globalRayGenerationSettingsOffset;
  98. int* globalTLASoffset;
  99. public:
  100. DLLEXPORT DirectX12();
  101. DLLEXPORT ~DirectX12();
  102. protected:
  103. DLLEXPORT void updateBottomLevelAccelerationStructure();
  104. DLLEXPORT void renderKamera(
  105. Cam3D* zKamera, DX12Texture* zTarget, bool guiVisible);
  106. DLLEXPORT virtual void renderWorld(World3D* zWorld,
  107. DX12TLAS* zTLAS,
  108. DX12ShaderBindingTable* zSBT,
  109. int& objectIndex);
  110. DLLEXPORT virtual void initializePipeline();
  111. DLLEXPORT virtual void initializeGlobalDescriptorHeap();
  112. DLLEXPORT virtual void initializeSamplerDescriptorHeap();
  113. DLLEXPORT virtual void fillShaderBindingTable(
  114. DX12ShaderBindingTable* zShaderBindingTable,
  115. Model3D* zModel,
  116. int objectIndex,
  117. const DX12BLAS* zBLAS,
  118. int& lastHitGroupIndex);
  119. DLLEXPORT virtual int fillGlobalShaderParams(Cam3D* zCam,
  120. DX12TLAS* zTLAS,
  121. DX12Texture* zTarget,
  122. int startIndex = 0);
  123. public:
  124. DLLEXPORT void initialize(NativeWindow* fenster,
  125. Vec2<int> backBufferSize,
  126. bool fullScreen) override;
  127. DLLEXPORT void beginFrame(
  128. bool fill2D, bool fill3D, int fillColor) override;
  129. DLLEXPORT void renderKamera(Cam3D* zKamera) override;
  130. DLLEXPORT virtual void renderKamera(
  131. Cam3D* zKamera, Texture* zTarget) override;
  132. //! TODO: DLLEXPORT void renderKamera( Cam3D* zKamera, Texture* zTarget
  133. //! ) override;
  134. DLLEXPORT void presentFrame() override;
  135. DLLEXPORT Texture* createOrGetTexture(
  136. const char* name, Image* b, TextureDirection dir) override;
  137. DLLEXPORT Image* zUIRenderImage() const override;
  138. DLLEXPORT virtual DXBuffer* createStructuredBuffer(int eSize) override;
  139. DLLEXPORT virtual Model3DData* createModel(const char* name);
  140. DLLEXPORT void setPipeline(DX12Pipeline* pipeline);
  141. DLLEXPORT static bool isAvailable();
  142. DLLEXPORT bool renderGuiBefore3D() const override;
  143. };
  144. } // namespace Framework