2
0

RenderPrimitive.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <Renderer/Renderer.h>
  6. #include <Jolt/Core/Reference.h>
  7. /// Simple wrapper around vertex and index buffers
  8. class RenderPrimitive : public RefTarget<RenderPrimitive>
  9. {
  10. public:
  11. /// Constructor
  12. RenderPrimitive(Renderer *inRenderer, D3D_PRIMITIVE_TOPOLOGY inType) : mRenderer(inRenderer), mType(inType) { }
  13. ~RenderPrimitive() { Clear(); }
  14. /// Erase all primitive data
  15. void Clear();
  16. /// Check if this primitive contains any data
  17. bool IsEmpty() const { return mNumVtx == 0 && mNumIdx == 0; }
  18. /// Vertex buffer management functions
  19. void CreateVertexBuffer(int inNumVtx, int inVtxSize, const void *inData = nullptr);
  20. void ReleaseVertexBuffer();
  21. void * LockVertexBuffer();
  22. void UnlockVertexBuffer();
  23. int GetNumVtx() const { return mNumVtx; }
  24. int GetNumVtxToDraw() const { return mNumVtxToDraw; }
  25. void SetNumVtxToDraw(int inUsed) { mNumVtxToDraw = inUsed; }
  26. /// Index buffer management functions
  27. void CreateIndexBuffer(int inNumIdx, const uint32 *inData = nullptr);
  28. void ReleaseIndexBuffer();
  29. uint32 * LockIndexBuffer();
  30. void UnlockIndexBuffer();
  31. int GetNumIdx() const { return mNumIdx; }
  32. int GetNumIdxToDraw() const { return mNumIdxToDraw; }
  33. void SetNumIdxToDraw(int inUsed) { mNumIdxToDraw = inUsed; }
  34. /// Draw the primitive
  35. void Draw() const;
  36. private:
  37. friend class RenderInstances;
  38. Renderer * mRenderer;
  39. D3D_PRIMITIVE_TOPOLOGY mType;
  40. ComPtr<ID3D12Resource> mVtxBuffer;
  41. int mNumVtx = 0;
  42. int mNumVtxToDraw = 0;
  43. int mVtxSize = 0;
  44. bool mVtxBufferInUploadHeap = false;
  45. ComPtr<ID3D12Resource> mIdxBuffer;
  46. int mNumIdx = 0;
  47. int mNumIdxToDraw = 0;
  48. bool mIdxBufferInUploadHeap = false;
  49. };