2
0

RenderInstances.h 1015 B

123456789101112131415161718192021222324252627282930313233343536
  1. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  2. // SPDX-License-Identifier: MIT
  3. #pragma once
  4. #include <Renderer/Renderer.h>
  5. #include <Jolt/Core/Reference.h>
  6. class RenderPrimitive;
  7. /// Buffer that holds a list of instances (usually model transform etc.) for instance based rendering
  8. class RenderInstances : public RefTarget<RenderInstances>
  9. {
  10. public:
  11. /// Constructor
  12. RenderInstances(Renderer *inRenderer) : mRenderer(inRenderer) { }
  13. ~RenderInstances() { Clear(); }
  14. /// Erase all instance data
  15. void Clear();
  16. /// Instance buffer management functions
  17. void CreateBuffer(int inNumInstances, int inInstanceSize);
  18. void * Lock();
  19. void Unlock();
  20. /// Draw the instances when context has been set by Renderer::BindShader
  21. void Draw(RenderPrimitive *inPrimitive, int inStartInstance, int inNumInstances) const;
  22. private:
  23. Renderer * mRenderer;
  24. ComPtr<ID3D12Resource> mInstanceBuffer;
  25. int mInstanceBufferSize = 0;
  26. int mInstanceSize = 0;
  27. };