CustomDX12API.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #pragma once
  2. #include <DX12GraphicsApi.h>
  3. #include <DX12Shader.h>
  4. #include <Vec3.h>
  5. #include <World3D.h>
  6. struct DX12ShaderLightInfo
  7. {
  8. Framework::Vec3<float> dayLightFactor;
  9. unsigned int padding; // Padding to align to 16 bytes
  10. Framework::Vec3<float> dayLightDirection;
  11. unsigned int padding2; // Padding to align to 16 bytes
  12. };
  13. class CustomDX12API : public Framework::DirectX12
  14. {
  15. private:
  16. int* sbtChunkTextureIdBufferOffset;
  17. int* sbtChunkIndexBufferOffset;
  18. int* sbtChunkDataBufferOffset;
  19. int* sbtChunkLightBufferOffset;
  20. int* sbtSimpleBlocksTextureIdBufferOffset;
  21. int* sbtSimpleBlocksIndexBufferOffset;
  22. int* sbtSimpleBlocksVertexDataBufferOffset;
  23. int* sbtSimpleBlocksIndexOffsetBufferOffset;
  24. int* globalLightBufferOffset;
  25. int* globalTLASoffset;
  26. int* globalRayGenerationSettingsOffset;
  27. Framework::DX12ShaderHitGroup* chunkHitGroup;
  28. Framework::DX12ShaderHitGroup* simpleBlocksHitGroup;
  29. Framework::DX12Buffer* lightInfoBuffer;
  30. DX12ShaderLightInfo lightInfo;
  31. public:
  32. CustomDX12API();
  33. ~CustomDX12API();
  34. void initializePipeline() override;
  35. void fillShaderBindingTable(
  36. Framework::DX12ShaderBindingTable* zShaderBindingTable,
  37. Framework::Model3D* zModel,
  38. int objectIndex,
  39. const Framework::DX12BLAS* zBLAS,
  40. int& lastHitGroupIndex) override;
  41. int fillGlobalShaderParams(Framework::Cam3D* zCam,
  42. Framework::DX12TLAS* zTLAS,
  43. Framework::DX12Texture* zTarget,
  44. int startIndex = 0) override;
  45. void renderWorld(Framework::World3D* zWorld,
  46. Framework::DX12TLAS* zTLAS,
  47. Framework::DX12ShaderBindingTable* zSBT,
  48. int& objectIndex) override;
  49. void initializeTextureDescriptorHeap() override;
  50. };