RenderPrimitiveMTL.mm 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2025 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #include <TestFramework.h>
  5. #include <Renderer/MTL/RenderPrimitiveMTL.h>
  6. void RenderPrimitiveMTL::ReleaseVertexBuffer()
  7. {
  8. [mVertexBuffer release];
  9. mVertexBuffer = nil;
  10. RenderPrimitive::ReleaseVertexBuffer();
  11. }
  12. void RenderPrimitiveMTL::ReleaseIndexBuffer()
  13. {
  14. [mIndexBuffer release];
  15. mIndexBuffer = nil;
  16. RenderPrimitive::ReleaseIndexBuffer();
  17. }
  18. void RenderPrimitiveMTL::CreateVertexBuffer(int inNumVtx, int inVtxSize, const void *inData)
  19. {
  20. RenderPrimitive::CreateVertexBuffer(inNumVtx, inVtxSize, inData);
  21. NSUInteger size = NSUInteger(inNumVtx) * inVtxSize;
  22. if (inData != nullptr)
  23. mVertexBuffer = [mRenderer->GetDevice() newBufferWithBytes: inData length: size options: MTLResourceCPUCacheModeDefaultCache | MTLResourceStorageModeShared | MTLResourceHazardTrackingModeTracked];
  24. else
  25. mVertexBuffer = [mRenderer->GetDevice() newBufferWithLength: size options: MTLResourceCPUCacheModeDefaultCache | MTLResourceStorageModeShared | MTLResourceHazardTrackingModeTracked];
  26. }
  27. void *RenderPrimitiveMTL::LockVertexBuffer()
  28. {
  29. return mVertexBuffer.contents;
  30. }
  31. void RenderPrimitiveMTL::UnlockVertexBuffer()
  32. {
  33. }
  34. void RenderPrimitiveMTL::CreateIndexBuffer(int inNumIdx, const uint32 *inData)
  35. {
  36. RenderPrimitive::CreateIndexBuffer(inNumIdx, inData);
  37. NSUInteger size = NSUInteger(inNumIdx) * sizeof(uint32);
  38. if (inData != nullptr)
  39. mIndexBuffer = [mRenderer->GetDevice() newBufferWithBytes: inData length: size options: MTLResourceCPUCacheModeDefaultCache | MTLResourceStorageModeManaged | MTLResourceHazardTrackingModeTracked];
  40. else
  41. mIndexBuffer = [mRenderer->GetDevice() newBufferWithLength: size options: MTLResourceCPUCacheModeDefaultCache | MTLResourceStorageModeShared | MTLResourceHazardTrackingModeTracked];
  42. }
  43. uint32 *RenderPrimitiveMTL::LockIndexBuffer()
  44. {
  45. return (uint32 *)mIndexBuffer.contents;
  46. }
  47. void RenderPrimitiveMTL::UnlockIndexBuffer()
  48. {
  49. }
  50. void RenderPrimitiveMTL::Draw() const
  51. {
  52. id<MTLRenderCommandEncoder> encoder = mRenderer->GetRenderEncoder();
  53. [encoder setVertexBuffer: mVertexBuffer offset: 0 atIndex: 0];
  54. if (mIndexBuffer == nil)
  55. [encoder drawPrimitives: mPrimitiveType vertexStart: 0 vertexCount: mNumVtxToDraw];
  56. else
  57. [encoder drawIndexedPrimitives: mPrimitiveType indexCount: mNumIdxToDraw indexType: MTLIndexTypeUInt32 indexBuffer: mIndexBuffer indexBufferOffset: 0];
  58. }