RenderPrimitive.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. /// Simple wrapper around vertex and index buffers
  7. class RenderPrimitive : public RefTarget<RenderPrimitive>
  8. {
  9. public:
  10. /// Constructor
  11. RenderPrimitive(Renderer *inRenderer, D3D_PRIMITIVE_TOPOLOGY inType) : mRenderer(inRenderer), mType(inType) { }
  12. ~RenderPrimitive() { Clear(); }
  13. /// Erase all primitive data
  14. void Clear();
  15. /// Check if this primitive contains any data
  16. bool IsEmpty() const { return mNumVtx == 0 && mNumIdx == 0; }
  17. /// Vertex buffer management functions
  18. void CreateVertexBuffer(int inNumVtx, int inVtxSize, const void *inData = nullptr);
  19. void ReleaseVertexBuffer();
  20. void * LockVertexBuffer();
  21. void UnlockVertexBuffer();
  22. int GetNumVtx() const { return mNumVtx; }
  23. int GetNumVtxToDraw() const { return mNumVtxToDraw; }
  24. void SetNumVtxToDraw(int inUsed) { mNumVtxToDraw = inUsed; }
  25. /// Index buffer management functions
  26. void CreateIndexBuffer(int inNumIdx, const uint32 *inData = nullptr);
  27. void ReleaseIndexBuffer();
  28. uint32 * LockIndexBuffer();
  29. void UnlockIndexBuffer();
  30. int GetNumIdx() const { return mNumIdx; }
  31. int GetNumIdxToDraw() const { return mNumIdxToDraw; }
  32. void SetNumIdxToDraw(int inUsed) { mNumIdxToDraw = inUsed; }
  33. /// Draw the primitive
  34. void Draw() const;
  35. private:
  36. friend class RenderInstances;
  37. Renderer * mRenderer;
  38. D3D_PRIMITIVE_TOPOLOGY mType;
  39. ComPtr<ID3D12Resource> mVtxBuffer;
  40. int mNumVtx = 0;
  41. int mNumVtxToDraw = 0;
  42. int mVtxSize = 0;
  43. bool mVtxBufferInUploadHeap = false;
  44. ComPtr<ID3D12Resource> mIdxBuffer;
  45. int mNumIdx = 0;
  46. int mNumIdxToDraw = 0;
  47. bool mIdxBufferInUploadHeap = false;
  48. };