// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics) // SPDX-FileCopyrightText: 2025 Jorrit Rouwe // SPDX-License-Identifier: MIT #pragma once #include #include #include /// Metal renderer class RendererMTL : public Renderer { public: virtual ~RendererMTL() override; // See: Renderer virtual void Initialize(ApplicationWindow *inWindow) override; virtual void BeginFrame(const CameraState &inCamera, float inWorldScale) override; virtual void EndShadowPass() override; virtual void EndFrame() override; virtual void SetProjectionMode() override; virtual void SetOrthoMode() override; virtual Ref CreateTexture(const Surface *inSurface) override; virtual Ref CreateVertexShader(const char *inName) override; virtual Ref CreatePixelShader(const char *inName) override; virtual unique_ptr 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; virtual RenderPrimitive * CreateRenderPrimitive(PipelineState::ETopology inType) override; virtual RenderInstances * CreateRenderInstances() override; virtual Texture * GetShadowMap() const override { return mShadowMap; } virtual void OnWindowResize() override { } MTKView * GetView() const { return mView; } id GetDevice() const { return mView.device; } id GetRenderEncoder() const { return mRenderEncoder; } private: MTKView * mView; MTLRenderPassDescriptor * mShadowRenderPass; Ref mShadowMap; id mShaderLibrary; id mCommandQueue; id mCommandBuffer; id mRenderEncoder; };