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 = 0; // Padding to align to 16 bytes
  10. Framework::Vec3<float> dayLightDirection;
  11. unsigned int padding2 = 0; // 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* sbtSimpleBlocksLightBufferOffset;
  25. int* sbtDefaultLightBufferOffset;
  26. int* globalLightBufferOffset;
  27. Framework::DX12ShaderHitGroup* chunkHitGroup;
  28. Framework::DX12ShaderHitGroup* simpleBlocksHitGroup;
  29. Framework::DX12Buffer* lightInfoBuffer;
  30. DX12ShaderLightInfo lightInfo;
  31. Framework::DX12Buffer* defaultLightBuffer;
  32. public:
  33. CustomDX12API();
  34. ~CustomDX12API();
  35. void initializePipeline() override;
  36. void fillShaderBindingTable(
  37. Framework::DX12ShaderBindingTable* zShaderBindingTable,
  38. Framework::Model3D* zModel,
  39. int objectIndex,
  40. const Framework::DX12BLAS* zBLAS,
  41. int& lastHitGroupIndex) override;
  42. int fillGlobalShaderParams(Framework::Cam3D* zCam,
  43. Framework::DX12TLAS* zTLAS,
  44. Framework::DX12Texture* zTarget,
  45. int startIndex = 0) override;
  46. void renderWorld(Framework::World3D* zWorld,
  47. Framework::DX12TLAS* zTLAS,
  48. Framework::DX12ShaderBindingTable* zSBT,
  49. int& objectIndex) override;
  50. };