RenderPrimitiveMTL.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2025 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <Renderer/RenderPrimitive.h>
  6. #include <Renderer/MTL/RendererMTL.h>
  7. /// Metal implementation of a render primitive
  8. class RenderPrimitiveMTL : public RenderPrimitive
  9. {
  10. public:
  11. /// Constructor
  12. RenderPrimitiveMTL(RendererMTL *inRenderer, MTLPrimitiveType inType) : mRenderer(inRenderer), mPrimitiveType(inType) { }
  13. virtual ~RenderPrimitiveMTL() override { Clear(); }
  14. /// Vertex buffer management functions
  15. virtual void CreateVertexBuffer(int inNumVtx, int inVtxSize, const void *inData = nullptr) override;
  16. virtual void ReleaseVertexBuffer() override;
  17. virtual void * LockVertexBuffer() override;
  18. virtual void UnlockVertexBuffer() override;
  19. /// Index buffer management functions
  20. virtual void CreateIndexBuffer(int inNumIdx, const uint32 *inData = nullptr) override;
  21. virtual void ReleaseIndexBuffer() override;
  22. virtual uint32 * LockIndexBuffer() override;
  23. virtual void UnlockIndexBuffer() override;
  24. /// Draw the primitive
  25. virtual void Draw() const override;
  26. private:
  27. friend class RenderInstancesMTL;
  28. RendererMTL * mRenderer;
  29. MTLPrimitiveType mPrimitiveType;
  30. id<MTLBuffer> mVertexBuffer;
  31. id<MTLBuffer> mIndexBuffer;
  32. };