CustomDX12API.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. Framework::DX12ShaderHitGroup* chunkHitGroup;
  26. Framework::DX12ShaderHitGroup* simpleBlocksHitGroup;
  27. Framework::DX12Buffer* lightInfoBuffer;
  28. DX12ShaderLightInfo lightInfo;
  29. public:
  30. CustomDX12API();
  31. ~CustomDX12API();
  32. void initializePipeline() override;
  33. void fillShaderBindingTable(
  34. Framework::DX12ShaderBindingTable* zShaderBindingTable,
  35. Framework::Model3D* zModel,
  36. int objectIndex,
  37. const Framework::DX12BLAS* zBLAS,
  38. int& lastHitGroupIndex) override;
  39. int fillGlobalShaderParams(Framework::Cam3D* zCam,
  40. Framework::DX12TLAS* zTLAS,
  41. Framework::DX12Texture* zTarget,
  42. int startIndex = 0) override;
  43. void renderWorld(Framework::World3D* zWorld,
  44. Framework::DX12TLAS* zTLAS,
  45. Framework::DX12ShaderBindingTable* zSBT,
  46. int& objectIndex) override;
  47. };