#pragma once #include #include #include "Block.h" struct ChunkShaderInfo { Framework::Point pos; unsigned int blockCount; }; struct ID3D12Resource; class DX12ChunkData : public ReferenceCounter { private: Framework::DX12Buffer* aabbs; Framework::DX12Buffer* chunkInfoBuffer; Framework::DX12Buffer* blasScratchBuffer; Framework::DX12Buffer* customBlocksBlasScratchBuffer; ID3D12Resource* oldBlasBuffer; Framework::DX12Buffer* blasBuffer; Framework::DX12Buffer* customBlocksBlasBuffer; Framework::DX12Buffer* blockIndexBuffer; Framework::DX12Buffer* textureIdBuffer; unsigned char* lightBuffer; int lightBufferSize; Framework::DX12Buffer* dxLightBuffer; RCArray vertexBuffers; RCArray indexBuffers; Framework::DX12Buffer* customBlockTextures; Framework::DX12Buffer* customBlocksCombinedIndexBuffer; Framework::DX12Buffer* customBlocksVertexDataBuffer; Framework::DX12Buffer* customBlocksIndexOffsetBuffer; Framework::DX12Buffer* customBlocksMatrixBuffer; unsigned char* customLightBuffer; int customLightBufferSize; Framework::DX12Buffer* customBlocksLightBuffer; RCArray customBlocks; Framework::Point chunkCenter; int* blockIndices; Framework::Array textureIds; int lastObjectIndex; int lastCustomObjectIndex; int lastHitGroupIndex; int lastCustomHitGroupIndex; bool changed; bool bufferChanged; bool customBufferChanged; bool customBlocksChanged; int minZ; int maxZ; Critical cs; bool minMaxChanged; public: DX12ChunkData(Framework::Point center); ~DX12ChunkData(); Framework::DX12Buffer* zChunkInfoBuffer() const; Framework::DX12Buffer* zBlasBuffer() const; Framework::DX12Buffer* zBlockIndexBuffer() const; Framework::DX12Buffer* zTextureIdBuffer() const; Framework::DX12Buffer* zLightBuffer() const; Framework::DX12Buffer* zCustomBlocksBlasBuffer() const; Framework::DX12Buffer* zCustomBlocksTextureBuffer() const; Framework::DX12Buffer* zCustomBlocksVertexDataBuffer() const; Framework::DX12Buffer* zCustomBlocksCombinedIndexBuffer() const; Framework::DX12Buffer* zCustomBlocksIndexOffsetBuffer() const; Framework::DX12Buffer* zCustomBlocksLightBuffer() const; void setBlock(int index, Block* zBlock); void updateLightning(Chunk* zChunk); void updateBuffers( ID3D12Device5* zDevice, Framework::DX12CommandQueue* zQueue); int getLastObjectIndex() const; int getLastCustomObjectIndex() const; int getLastHitGroupIndex() const; int getLastCustomHitGroupIndex() const; void setLastObjectIndex(int index); void setLastCustomObjectIndex(int index); void setLastHitGroupIndex(int index); void setLastCustomHitGroupIndex(int index); bool wasBufferChanged() const; void setBufferChanged(bool changed); bool isSimpleBlock(Block* zBlock) const; bool hasCustomBlocks() const; bool wasCustomBufferChanged() const; void setCustomBufferChanged(bool changed); };