#pragma once #include #include #include #include struct DX12ShaderLightInfo { Framework::Vec3 dayLightFactor; unsigned int padding = 0; // Padding to align to 16 bytes Framework::Vec3 dayLightDirection; unsigned int padding2 = 0; // Padding to align to 16 bytes }; class CustomDX12API : public Framework::DirectX12 { private: int* sbtChunkTextureIdBufferOffset; int* sbtChunkIndexBufferOffset; int* sbtChunkDataBufferOffset; int* sbtChunkLightBufferOffset; int* sbtSimpleBlocksTextureIdBufferOffset; int* sbtSimpleBlocksIndexBufferOffset; int* sbtSimpleBlocksVertexDataBufferOffset; int* sbtSimpleBlocksIndexOffsetBufferOffset; int* sbtSimpleBlocksLightBufferOffset; int* sbtDefaultLightBufferOffset; int* globalLightBufferOffset; Framework::DX12ShaderHitGroup* chunkHitGroup; Framework::DX12ShaderHitGroup* simpleBlocksHitGroup; Framework::DX12Buffer* lightInfoBuffer; DX12ShaderLightInfo lightInfo; Framework::DX12Buffer* defaultLightBuffer; public: CustomDX12API(); ~CustomDX12API(); void initializePipeline() override; void fillShaderBindingTable( Framework::DX12ShaderBindingTable* zShaderBindingTable, Framework::Model3D* zModel, int objectIndex, const Framework::DX12BLAS* zBLAS, int& lastHitGroupIndex) override; int fillGlobalShaderParams(Framework::Cam3D* zCam, Framework::DX12TLAS* zTLAS, Framework::DX12Texture* zTarget, int startIndex = 0) override; void renderWorld(Framework::World3D* zWorld, Framework::DX12TLAS* zTLAS, Framework::DX12ShaderBindingTable* zSBT, int& objectIndex) override; };