DX12ChunkData.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #pragma once
  2. #include <DX12Buffer.h>
  3. #include <Point.h>
  4. #include "Block.h"
  5. struct ChunkShaderInfo
  6. {
  7. Framework::Point pos;
  8. unsigned int blockCount;
  9. };
  10. struct ID3D12Resource;
  11. class DX12ChunkData : public ReferenceCounter
  12. {
  13. private:
  14. Framework::DX12Buffer* aabbs;
  15. Framework::DX12Buffer* chunkInfoBuffer;
  16. Framework::DX12Buffer* blasScratchBuffer;
  17. Framework::DX12Buffer* customBlocksBlasScratchBuffer;
  18. ID3D12Resource* oldBlasBuffer;
  19. Framework::DX12Buffer* blasBuffer;
  20. Framework::DX12Buffer* customBlocksBlasBuffer;
  21. Framework::DX12Buffer* blockIndexBuffer;
  22. Framework::DX12Buffer* textureIdBuffer;
  23. unsigned char* lightBuffer;
  24. int lightBufferSize;
  25. Framework::DX12Buffer* dxLightBuffer;
  26. RCArray<DX12Buffer> vertexBuffers;
  27. RCArray<DX12Buffer> indexBuffers;
  28. Framework::DX12Buffer* customBlockTextures;
  29. Framework::DX12Buffer* customBlocksCombinedIndexBuffer;
  30. Framework::DX12Buffer* customBlocksVertexDataBuffer;
  31. Framework::DX12Buffer* customBlocksIndexOffsetBuffer;
  32. Framework::DX12Buffer* customBlocksMatrixBuffer;
  33. unsigned char* customLightBuffer;
  34. int customLightBufferSize;
  35. Framework::DX12Buffer* customBlocksLightBuffer;
  36. RCArray<Block> customBlocks;
  37. Framework::Point chunkCenter;
  38. int* blockIndices;
  39. Framework::Array<int> textureIds;
  40. int lastObjectIndex;
  41. int lastCustomObjectIndex;
  42. int lastHitGroupIndex;
  43. int lastCustomHitGroupIndex;
  44. bool changed;
  45. bool bufferChanged;
  46. bool customBufferChanged;
  47. bool customBlocksChanged;
  48. int minZ;
  49. int maxZ;
  50. Critical cs;
  51. bool minMaxChanged;
  52. public:
  53. DX12ChunkData(Framework::Point center);
  54. ~DX12ChunkData();
  55. Framework::DX12Buffer* zChunkInfoBuffer() const;
  56. Framework::DX12Buffer* zBlasBuffer() const;
  57. Framework::DX12Buffer* zBlockIndexBuffer() const;
  58. Framework::DX12Buffer* zTextureIdBuffer() const;
  59. Framework::DX12Buffer* zLightBuffer() const;
  60. Framework::DX12Buffer* zCustomBlocksBlasBuffer() const;
  61. Framework::DX12Buffer* zCustomBlocksTextureBuffer() const;
  62. Framework::DX12Buffer* zCustomBlocksVertexDataBuffer() const;
  63. Framework::DX12Buffer* zCustomBlocksCombinedIndexBuffer() const;
  64. Framework::DX12Buffer* zCustomBlocksIndexOffsetBuffer() const;
  65. Framework::DX12Buffer* zCustomBlocksLightBuffer() const;
  66. void setBlock(int index, Block* zBlock);
  67. void updateLightning(Chunk* zChunk);
  68. void updateBuffers(
  69. ID3D12Device5* zDevice, Framework::DX12CommandQueue* zQueue);
  70. int getLastObjectIndex() const;
  71. int getLastCustomObjectIndex() const;
  72. int getLastHitGroupIndex() const;
  73. int getLastCustomHitGroupIndex() const;
  74. void setLastObjectIndex(int index);
  75. void setLastCustomObjectIndex(int index);
  76. void setLastHitGroupIndex(int index);
  77. void setLastCustomHitGroupIndex(int index);
  78. bool wasBufferChanged() const;
  79. void setBufferChanged(bool changed);
  80. bool isSimpleBlock(Block* zBlock) const;
  81. bool hasCustomBlocks() const;
  82. bool wasCustomBufferChanged() const;
  83. void setCustomBufferChanged(bool changed);
  84. };