RendererMTL.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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/Renderer.h>
  6. #include <Renderer/MTL/TextureMTL.h>
  7. #include <MetalKit/MetalKit.h>
  8. /// Metal renderer
  9. class RendererMTL : public Renderer
  10. {
  11. public:
  12. virtual ~RendererMTL() override;
  13. // See: Renderer
  14. virtual void Initialize(ApplicationWindow *inWindow) override;
  15. virtual void BeginFrame(const CameraState &inCamera, float inWorldScale) override;
  16. virtual void EndShadowPass() override;
  17. virtual void EndFrame() override;
  18. virtual void SetProjectionMode() override;
  19. virtual void SetOrthoMode() override;
  20. virtual Ref<Texture> CreateTexture(const Surface *inSurface) override;
  21. virtual Ref<VertexShader> CreateVertexShader(const char *inName) override;
  22. virtual Ref<PixelShader> CreatePixelShader(const char *inName) override;
  23. virtual unique_ptr<PipelineState> CreatePipelineState(const VertexShader *inVertexShader, const PipelineState::EInputDescription *inInputDescription, uint inInputDescriptionCount, const PixelShader *inPixelShader, PipelineState::EDrawPass inDrawPass, PipelineState::EFillMode inFillMode, PipelineState::ETopology inTopology, PipelineState::EDepthTest inDepthTest, PipelineState::EBlendMode inBlendMode, PipelineState::ECullMode inCullMode) override;
  24. virtual RenderPrimitive * CreateRenderPrimitive(PipelineState::ETopology inType) override;
  25. virtual RenderInstances * CreateRenderInstances() override;
  26. virtual Texture * GetShadowMap() const override { return mShadowMap; }
  27. virtual void OnWindowResize() override { }
  28. MTKView * GetView() const { return mView; }
  29. id<MTLDevice> GetDevice() const { return mView.device; }
  30. id<MTLRenderCommandEncoder> GetRenderEncoder() const { return mRenderEncoder; }
  31. private:
  32. MTKView * mView;
  33. MTLRenderPassDescriptor * mShadowRenderPass;
  34. Ref<TextureMTL> mShadowMap;
  35. id<MTLLibrary> mShaderLibrary;
  36. id<MTLCommandQueue> mCommandQueue;
  37. id<MTLCommandBuffer> mCommandBuffer;
  38. id<MTLRenderCommandEncoder> mRenderEncoder;
  39. };