RenderPrimitive.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 <Jolt/Core/Reference.h>
  6. /// Simple wrapper around vertex and index buffers
  7. class RenderPrimitive : public RefTarget<RenderPrimitive>, public RefTargetVirtual
  8. {
  9. public:
  10. /// Destructor
  11. virtual ~RenderPrimitive() override = default;
  12. /// Erase all primitive data
  13. void Clear();
  14. /// Check if this primitive contains any data
  15. bool IsEmpty() const { return mNumVtx == 0 && mNumIdx == 0; }
  16. /// Vertex buffer management functions
  17. virtual void CreateVertexBuffer(int inNumVtx, int inVtxSize, const void *inData = nullptr) = 0;
  18. virtual void ReleaseVertexBuffer();
  19. virtual void * LockVertexBuffer() = 0;
  20. virtual void UnlockVertexBuffer() = 0;
  21. int GetNumVtx() const { return mNumVtx; }
  22. int GetNumVtxToDraw() const { return mNumVtxToDraw; }
  23. void SetNumVtxToDraw(int inUsed) { mNumVtxToDraw = inUsed; }
  24. /// Index buffer management functions
  25. virtual void CreateIndexBuffer(int inNumIdx, const uint32 *inData = nullptr) = 0;
  26. virtual void ReleaseIndexBuffer();
  27. virtual uint32 * LockIndexBuffer() = 0;
  28. virtual void UnlockIndexBuffer() = 0;
  29. int GetNumIdx() const { return mNumIdx; }
  30. int GetNumIdxToDraw() const { return mNumIdxToDraw; }
  31. void SetNumIdxToDraw(int inUsed) { mNumIdxToDraw = inUsed; }
  32. /// Draw the primitive
  33. virtual void Draw() const = 0;
  34. /// Implement RefTargetVirtual, so we can conveniently use this class as DebugRenderer::Batch
  35. virtual void AddRef() override { RefTarget<RenderPrimitive>::AddRef(); }
  36. virtual void Release() override { RefTarget<RenderPrimitive>::Release(); }
  37. protected:
  38. int mNumVtx = 0;
  39. int mNumVtxToDraw = 0;
  40. int mVtxSize = 0;
  41. int mNumIdx = 0;
  42. int mNumIdxToDraw = 0;
  43. };