VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
visutwin::canvas::MetalGraphicsDevice Class Reference

#include <platform/graphics/metal/metalGraphicsDevice.h>

Inheritance diagram for visutwin::canvas::MetalGraphicsDevice:
[legend]

Public Member Functions

MTL::CommandQueue * commandQueue () const
void computeDispatch (const std::vector< Compute * > &computes, const std::string &label="") override
std::unique_ptr< gpu::HardwareTexturecreateGPUTexture (Texture *texture) override
std::shared_ptr< IndexBuffercreateIndexBuffer (IndexFormat format, int numIndices, const std::vector< uint8_t > &data={}) override
std::shared_ptr< RenderTargetcreateRenderTarget (const RenderTargetOptions &options) override
std::shared_ptr< ShadercreateShader (const ShaderDefinition &definition, const std::string &sourceCode="") override
std::shared_ptr< VertexBuffercreateVertexBuffer (const std::shared_ptr< VertexFormat > &format, int numVertices, const VertexBufferOptions &options=VertexBufferOptions{}) override
std::shared_ptr< VertexBuffercreateVertexBufferFromMTLBuffer (const std::shared_ptr< VertexFormat > &format, int numVertices, MTL::Buffer *externalBuffer)
std::shared_ptr< VertexBuffercreateVertexBufferFromNativeBuffer (const std::shared_ptr< VertexFormat > &format, int numVertices, void *nativeBuffer) override
void draw (const Primitive &primitive, const std::shared_ptr< IndexBuffer > &indexBuffer=nullptr, int numInstances=1, int indirectSlot=-1, bool first=true, bool last=true) override
void endRenderPass (RenderPass *renderPass) override
void executeCoCPass (const CoCPassParams &params) override
void executeComposePass (const ComposePassParams &params) override
void executeDepthAwareBlurPass (const DepthAwareBlurPassParams &params, bool horizontal) override
void executeDofBlurPass (const DofBlurPassParams &params) override
void executeSsaoPass (const SsaoPassParams &params) override
void executeTAAPass (Texture *sourceTexture, Texture *historyTexture, Texture *depthTexture, const Matrix4 &viewProjectionPrevious, const Matrix4 &viewProjectionInverse, const std::array< float, 4 > &jitters, const std::array< float, 4 > &cameraParams, bool highQuality, bool historyValid) override
CA::MetalDrawable * frameDrawable () const
 MetalGraphicsDevice (const GraphicsDeviceOptions &options)
MTL::Device * raw () const
void setAtmosphereUniforms (const void *data, size_t size) override
void setClusterBuffers (const void *lightData, size_t lightSize, const void *cellData, size_t cellSize) override
void setClusterGridParams (const float *boundsMin, const float *boundsRange, const float *cellsCountByBoundsSize, int cellsX, int cellsY, int cellsZ, int maxLightsPerCell, int numClusteredLights) override
void setDepthBias (float depthBias, float slopeScale, float clamp) override
void setDynamicBatchPalette (const void *data, size_t size) override
void setEnvironmentUniforms (Texture *envAtlas, float skyboxIntensity, float skyboxMip, const Vector3 &skyDomeCenter=Vector3(0, 0, 0), bool isDome=false, Texture *skyboxCubeMap=nullptr) override
void setIndirectDrawBuffer (void *nativeBuffer) override
void setLightingUniforms (const Color &ambientColor, const std::vector< GpuLightData > &lights, const Vector3 &cameraPosition, bool enableNormalMaps, float exposure, const FogParams &fogParams=FogParams{}, const ShadowParams &shadowParams=ShadowParams{}, int toneMapping=0) override
void setResolution (int width, int height) override
void setScissor (int x, int y, int w, int h) override
void setTransformUniforms (const Matrix4 &viewProjection, const Matrix4 &model) override
void setViewport (float x, float y, float w, float h) override
std::pair< int, int > size () const override
void startRenderPass (RenderPass *renderPass) override
bool supportsCompute () const override
 ~MetalGraphicsDevice ()
Public Member Functions inherited from visutwin::canvas::GraphicsDevice
void addTexture (const std::shared_ptr< Texture > &texture)
bool atmosphereEnabled () const
std::shared_ptr< RenderTargetbackBuffer () const
void clearQuadTextureBindings ()
bool contextLost () const
CullMode cullMode () const
int drawCallsPerFrame () const
void frameEnd ()
void frameStart ()
std::shared_ptr< ShadergetCachedShader (const std::string &name) const
bool hdrPass () const
bool insideRenderPass () const
const Materialmaterial () const
int maxSamples () const
bool quadRenderActive () const
TexturequadTextureBinding (const size_t slot) const
const std::array< Texture *, 8 > & quadTextureBindings () const
std::shared_ptr< VertexBufferquadVertexBuffer ()
const ReflectionBlurParamsreflectionBlurParams () const
TexturereflectionDepthMap () const
TexturereflectionMap () const
void removeTarget (RenderTarget *target)
std::shared_ptr< RenderTargetrenderTarget () const
int renderVersion () const
void resetDrawCallsPerFrame ()
void resizeCanvas (int width, int height)
int samples () const
TexturesceneDepthMap () const
void setAtmosphereEnabled (bool value)
 Enable/disable atmosphere scattering for the current frame.
void setBlendState (const std::shared_ptr< BlendState > &blendState)
void setCachedShader (const std::string &name, const std::shared_ptr< Shader > &shader)
void setCullMode (const CullMode cullMode)
void setDepthState (const std::shared_ptr< DepthState > &depthState)
void setHdrPass (bool hdr)
void setMaterial (const Material *material)
void setQuadRenderActive (const bool active)
void setQuadTextureBinding (const size_t slot, Texture *texture)
void setReflectionBlurParams (const ReflectionBlurParams &params)
void setReflectionDepthMap (Texture *tex)
void setReflectionMap (Texture *tex)
void setRenderTarget (const std::shared_ptr< RenderTarget > &target)
void setSceneDepthMap (Texture *depthMap)
void setShader (const std::shared_ptr< Shader > &shader)
void setSsaoForwardTexture (Texture *tex)
void setStencilState (const std::shared_ptr< StencilParameters > &stencilFront=nullptr, const std::shared_ptr< StencilParameters > &stencilBack=nullptr)
void setVertexBuffer (const std::shared_ptr< VertexBuffer > &vertexBuffer, const size_t slot=0)
int sh () const
TexturessaoForwardTexture () const
int sw () const
int sx () const
int sy () const
virtual void update ()
void updateClientRect ()
float vh () const
float vw () const
float vx () const
float vy () const
virtual ~GraphicsDevice ()
Public Member Functions inherited from visutwin::canvas::EventHandler
template<typename... Args>
EventHandlerfire (const std::string &name, Args &&... args)
bool hasEvent (const std::string &name) const
void initEventHandler ()
template<typename Callback>
requires (!std::is_same_v<std::decay_t<Callback>, HandleEventCallback>)
EventHandleroff (const std::string &name, Callback &&callback, void *scope=nullptr)
EventHandleroff (const std::string &name="", const HandleEventCallback &callback=HandleEventCallback(), void *scope=nullptr)
EventHandleroffByHandle (EventHandle *handle)
template<typename Callback>
requires (!std::is_same_v<std::decay_t<Callback>, HandleEventCallback>)
EventHandleon (const std::string &name, Callback &&callback, void *scope=nullptr)
EventHandleon (const std::string &name, HandleEventCallback callback, void *scope=nullptr)
template<typename Callback>
requires (!std::is_same_v<std::decay_t<Callback>, HandleEventCallback>)
EventHandleonce (const std::string &name, Callback &&callback, void *scope=nullptr)
EventHandleonce (const std::string &name, HandleEventCallback callback, void *scope=nullptr)
virtual ~EventHandler ()=default

Friends

class MetalCoCPass
class MetalComposePass
class MetalDepthAwareBlurPass
class MetalDofBlurPass
class MetalInstanceCullPass
class MetalLICPass
class MetalMarchingCubesPass
class MetalParticleComputePass
class MetalSsaoPass
class MetalTaaPass

Additional Inherited Members

Protected Member Functions inherited from visutwin::canvas::GraphicsDevice
void clearVertexBuffer ()
void recordDrawCall (int count=1)
void setBackBuffer (const std::shared_ptr< RenderTarget > &target)
Protected Member Functions inherited from visutwin::canvas::EventHandler
EventHandleaddCallback (const std::string &name, HandleEventCallback callback, void *scope=nullptr, bool once=false)
Protected Attributes inherited from visutwin::canvas::GraphicsDevice
std::shared_ptr< BlendState_blendState
CullMode _cullMode = CullMode::CULLFACE_BACK
std::shared_ptr< DepthState_depthState
bool _insideRenderPass = false
const Material_material = nullptr
std::shared_ptr< RenderTarget_renderTarget
std::shared_ptr< Shader_shader
std::shared_ptr< StencilParameters_stencilBack
bool _stencilEnabled = false
std::shared_ptr< StencilParameters_stencilFront
std::vector< std::shared_ptr< VertexBuffer > > _vertexBuffers

Detailed Description

Metal implementation of the graphics device. Inherits from GraphicsDevice and implements Metal-specific rendering functionality.

Definition at line 45 of file metalGraphicsDevice.h.

Constructor & Destructor Documentation

◆ MetalGraphicsDevice()

◆ ~MetalGraphicsDevice()

visutwin::canvas::MetalGraphicsDevice::~MetalGraphicsDevice ( )

Definition at line 134 of file metalGraphicsDevice.cpp.

References _renderPassEncoder.

Member Function Documentation

◆ commandQueue()

MTL::CommandQueue * visutwin::canvas::MetalGraphicsDevice::commandQueue ( ) const
inlinenodiscard

Definition at line 75 of file metalGraphicsDevice.h.

◆ computeDispatch()

void visutwin::canvas::MetalGraphicsDevice::computeDispatch ( const std::vector< Compute * > & computes,
const std::string & label = "" )
overridevirtual

◆ createGPUTexture()

std::unique_ptr< gpu::HardwareTexture > visutwin::canvas::MetalGraphicsDevice::createGPUTexture ( Texture * texture)
overridevirtual

◆ createIndexBuffer()

std::shared_ptr< IndexBuffer > visutwin::canvas::MetalGraphicsDevice::createIndexBuffer ( IndexFormat format,
int numIndices,
const std::vector< uint8_t > & data = {} )
overridevirtual

Implements visutwin::canvas::GraphicsDevice.

Definition at line 306 of file metalGraphicsDevice.cpp.

◆ createRenderTarget()

std::shared_ptr< RenderTarget > visutwin::canvas::MetalGraphicsDevice::createRenderTarget ( const RenderTargetOptions & options)
overridevirtual

Implements visutwin::canvas::GraphicsDevice.

Definition at line 316 of file metalGraphicsDevice.cpp.

◆ createShader()

std::shared_ptr< Shader > visutwin::canvas::MetalGraphicsDevice::createShader ( const ShaderDefinition & definition,
const std::string & sourceCode = "" )
overridevirtual

Create a backend-specific shader from a definition and optional source code. Backends override this to return their own Shader subclass (e.g., MetalShader).

Reimplemented from visutwin::canvas::GraphicsDevice.

Definition at line 273 of file metalGraphicsDevice.cpp.

◆ createVertexBuffer()

std::shared_ptr< VertexBuffer > visutwin::canvas::MetalGraphicsDevice::createVertexBuffer ( const std::shared_ptr< VertexFormat > & format,
int numVertices,
const VertexBufferOptions & options = VertexBufferOptions{} )
overridevirtual

Implements visutwin::canvas::GraphicsDevice.

Definition at line 286 of file metalGraphicsDevice.cpp.

◆ createVertexBufferFromMTLBuffer()

std::shared_ptr< VertexBuffer > visutwin::canvas::MetalGraphicsDevice::createVertexBufferFromMTLBuffer ( const std::shared_ptr< VertexFormat > & format,
int numVertices,
MTL::Buffer * externalBuffer )

Create a VertexBuffer that adopts a pre-existing MTL::Buffer (zero-copy). Used for GPU compute output paths where the buffer is already filled.

Definition at line 292 of file metalGraphicsDevice.cpp.

Referenced by createVertexBufferFromNativeBuffer().

◆ createVertexBufferFromNativeBuffer()

std::shared_ptr< VertexBuffer > visutwin::canvas::MetalGraphicsDevice::createVertexBufferFromNativeBuffer ( const std::shared_ptr< VertexFormat > & format,
int numVertices,
void * nativeBuffer )
overridevirtual

Create a VertexBuffer that adopts a pre-existing GPU buffer (zero-copy). The nativeBuffer pointer is backend-specific (MTL::Buffer*, VkBuffer, etc.). Used for GPU compute output paths where the buffer is already filled.

Reimplemented from visutwin::canvas::GraphicsDevice.

Definition at line 299 of file metalGraphicsDevice.cpp.

References createVertexBufferFromMTLBuffer().

◆ draw()

void visutwin::canvas::MetalGraphicsDevice::draw ( const Primitive & primitive,
const std::shared_ptr< IndexBuffer > & indexBuffer = nullptr,
int numInstances = 1,
int indirectSlot = -1,
bool first = true,
bool last = true )
overridevirtual

Implements visutwin::canvas::GraphicsDevice.

Definition at line 551 of file metalGraphicsDevice.cpp.

References visutwin::canvas::GraphicsDevice::_blendState, visutwin::canvas::GraphicsDevice::_cullMode, visutwin::canvas::GraphicsDevice::_depthState, _renderPassEncoder, visutwin::canvas::GraphicsDevice::_renderTarget, visutwin::canvas::GraphicsDevice::_shader, visutwin::canvas::GraphicsDevice::_stencilBack, visutwin::canvas::GraphicsDevice::_stencilEnabled, visutwin::canvas::GraphicsDevice::_stencilFront, visutwin::canvas::GraphicsDevice::_vertexBuffers, visutwin::canvas::GraphicsDevice::atmosphereEnabled(), visutwin::canvas::Primitive::base, visutwin::canvas::Primitive::baseVertex, visutwin::canvas::GraphicsDevice::clearVertexBuffer(), visutwin::canvas::Primitive::count, visutwin::canvas::CULLFACE_FRONTANDBACK, visutwin::canvas::GraphicsDevice::hdrPass(), visutwin::canvas::INDEXFORMAT_UINT16, visutwin::canvas::INDEXFORMAT_UINT32, visutwin::canvas::INDEXFORMAT_UINT8, visutwin::canvas::INDIRECT_ENTRY_BYTE_SIZE, visutwin::canvas::GraphicsDevice::material(), visutwin::canvas::GraphicsDevice::quadRenderActive(), visutwin::canvas::GraphicsDevice::quadTextureBindings(), visutwin::canvas::GraphicsDevice::recordDrawCall(), visutwin::canvas::GraphicsDevice::reflectionBlurParams(), visutwin::canvas::GraphicsDevice::reflectionDepthMap(), visutwin::canvas::GraphicsDevice::reflectionMap(), visutwin::canvas::GraphicsDevice::sceneDepthMap(), visutwin::canvas::GraphicsDevice::ssaoForwardTexture(), visutwin::canvas::toMetalCullMode(), visutwin::canvas::toMetalPrimitiveType(), visutwin::canvas::Primitive::type, visutwin::canvas::GraphicsDevice::vh(), and visutwin::canvas::GraphicsDevice::vw().

◆ endRenderPass()

◆ executeCoCPass()

void visutwin::canvas::MetalGraphicsDevice::executeCoCPass ( const CoCPassParams & params)
overridevirtual

◆ executeComposePass()

void visutwin::canvas::MetalGraphicsDevice::executeComposePass ( const ComposePassParams & params)
overridevirtual

◆ executeDepthAwareBlurPass()

void visutwin::canvas::MetalGraphicsDevice::executeDepthAwareBlurPass ( const DepthAwareBlurPassParams & params,
bool horizontal )
overridevirtual

◆ executeDofBlurPass()

void visutwin::canvas::MetalGraphicsDevice::executeDofBlurPass ( const DofBlurPassParams & params)
overridevirtual

◆ executeSsaoPass()

void visutwin::canvas::MetalGraphicsDevice::executeSsaoPass ( const SsaoPassParams & params)
overridevirtual

◆ executeTAAPass()

void visutwin::canvas::MetalGraphicsDevice::executeTAAPass ( Texture * sourceTexture,
Texture * historyTexture,
Texture * depthTexture,
const Matrix4 & viewProjectionPrevious,
const Matrix4 & viewProjectionInverse,
const std::array< float, 4 > & jitters,
const std::array< float, 4 > & cameraParams,
bool highQuality,
bool historyValid )
overridevirtual

◆ frameDrawable()

CA::MetalDrawable * visutwin::canvas::MetalGraphicsDevice::frameDrawable ( ) const
inlinenodiscard

Definition at line 76 of file metalGraphicsDevice.h.

◆ raw()

MTL::Device * visutwin::canvas::MetalGraphicsDevice::raw ( ) const
inlinenodiscard

◆ setAtmosphereUniforms()

void visutwin::canvas::MetalGraphicsDevice::setAtmosphereUniforms ( const void * data,
size_t size )
overridevirtual

Set atmosphere uniforms for Nishita sky scattering. data must point to an AtmosphereUniforms-compatible struct (96 bytes).

Reimplemented from visutwin::canvas::GraphicsDevice.

Definition at line 546 of file metalGraphicsDevice.cpp.

References size().

◆ setClusterBuffers()

void visutwin::canvas::MetalGraphicsDevice::setClusterBuffers ( const void * lightData,
size_t lightSize,
const void * cellData,
size_t cellSize )
overridevirtual

Bind clustered lighting data for the current frame. Allocates/grows internal MTL::Buffers and copies data.

Reimplemented from visutwin::canvas::GraphicsDevice.

Definition at line 480 of file metalGraphicsDevice.cpp.

◆ setClusterGridParams()

void visutwin::canvas::MetalGraphicsDevice::setClusterGridParams ( const float * boundsMin,
const float * boundsRange,
const float * cellsCountByBoundsSize,
int cellsX,
int cellsY,
int cellsZ,
int maxLightsPerCell,
int numClusteredLights )
overridevirtual

Set clustered lighting grid parameters into LightingUniforms. Called by the renderer after WorldClusters::update().

Reimplemented from visutwin::canvas::GraphicsDevice.

Definition at line 515 of file metalGraphicsDevice.cpp.

◆ setDepthBias()

void visutwin::canvas::MetalGraphicsDevice::setDepthBias ( float depthBias,
float slopeScale,
float clamp )
overridevirtual

Reimplemented from visutwin::canvas::GraphicsDevice.

Definition at line 461 of file metalGraphicsDevice.cpp.

References _renderPassEncoder.

◆ setDynamicBatchPalette()

void visutwin::canvas::MetalGraphicsDevice::setDynamicBatchPalette ( const void * data,
size_t size )
overridevirtual

Bind the dynamic batch matrix palette at slot 6 via setVertexBytes. Uses Metal buffer for bone data.

Reimplemented from visutwin::canvas::GraphicsDevice.

Definition at line 472 of file metalGraphicsDevice.cpp.

References size().

◆ setEnvironmentUniforms()

void visutwin::canvas::MetalGraphicsDevice::setEnvironmentUniforms ( Texture * envAtlas,
float skyboxIntensity,
float skyboxMip,
const Vector3 & skyDomeCenter = Vector3(0,0,0),
bool isDome = false,
Texture * skyboxCubeMap = nullptr )
overridevirtual

◆ setIndirectDrawBuffer()

void visutwin::canvas::MetalGraphicsDevice::setIndirectDrawBuffer ( void * nativeBuffer)
overridevirtual

Set the indirect draw buffer for the next draw call. The buffer is consumed (reset to nullptr) after one indirect draw.

Reimplemented from visutwin::canvas::GraphicsDevice.

Definition at line 467 of file metalGraphicsDevice.cpp.

◆ setLightingUniforms()

void visutwin::canvas::MetalGraphicsDevice::setLightingUniforms ( const Color & ambientColor,
const std::vector< GpuLightData > & lights,
const Vector3 & cameraPosition,
bool enableNormalMaps,
float exposure,
const FogParams & fogParams = FogParams{},
const ShadowParams & shadowParams = ShadowParams{},
int toneMapping = 0 )
overridevirtual

Reimplemented from visutwin::canvas::GraphicsDevice.

Definition at line 530 of file metalGraphicsDevice.cpp.

◆ setResolution()

void visutwin::canvas::MetalGraphicsDevice::setResolution ( int width,
int height )
overridevirtual

Implements visutwin::canvas::GraphicsDevice.

Definition at line 1066 of file metalGraphicsDevice.cpp.

◆ setScissor()

void visutwin::canvas::MetalGraphicsDevice::setScissor ( int x,
int y,
int w,
int h )
overridevirtual

◆ setTransformUniforms()

void visutwin::canvas::MetalGraphicsDevice::setTransformUniforms ( const Matrix4 & viewProjection,
const Matrix4 & model )
overridevirtual

Reimplemented from visutwin::canvas::GraphicsDevice.

Definition at line 524 of file metalGraphicsDevice.cpp.

References _renderPassEncoder.

◆ setViewport()

void visutwin::canvas::MetalGraphicsDevice::setViewport ( float x,
float y,
float w,
float h )
overridevirtual

◆ size()

std::pair< int, int > visutwin::canvas::MetalGraphicsDevice::size ( ) const
overridevirtual

◆ startRenderPass()

◆ supportsCompute()

bool visutwin::canvas::MetalGraphicsDevice::supportsCompute ( ) const
inlineoverridevirtual

Reimplemented from visutwin::canvas::GraphicsDevice.

Definition at line 108 of file metalGraphicsDevice.h.

◆ MetalCoCPass

friend class MetalCoCPass
friend

Definition at line 47 of file metalGraphicsDevice.h.

References MetalCoCPass.

Referenced by MetalCoCPass.

◆ MetalComposePass

friend class MetalComposePass
friend

Definition at line 48 of file metalGraphicsDevice.h.

References MetalComposePass.

Referenced by MetalComposePass.

◆ MetalDepthAwareBlurPass

friend class MetalDepthAwareBlurPass
friend

Definition at line 49 of file metalGraphicsDevice.h.

References MetalDepthAwareBlurPass.

Referenced by MetalDepthAwareBlurPass.

◆ MetalDofBlurPass

friend class MetalDofBlurPass
friend

Definition at line 50 of file metalGraphicsDevice.h.

References MetalDofBlurPass.

Referenced by MetalDofBlurPass.

◆ MetalInstanceCullPass

friend class MetalInstanceCullPass
friend

Definition at line 56 of file metalGraphicsDevice.h.

References MetalInstanceCullPass.

Referenced by MetalInstanceCullPass.

◆ MetalLICPass

friend class MetalLICPass
friend

Definition at line 51 of file metalGraphicsDevice.h.

References MetalLICPass.

Referenced by MetalLICPass.

◆ MetalMarchingCubesPass

friend class MetalMarchingCubesPass
friend

Definition at line 52 of file metalGraphicsDevice.h.

References MetalMarchingCubesPass.

Referenced by MetalMarchingCubesPass.

◆ MetalParticleComputePass

friend class MetalParticleComputePass
friend

Definition at line 53 of file metalGraphicsDevice.h.

References MetalParticleComputePass.

Referenced by MetalParticleComputePass.

◆ MetalSsaoPass

friend class MetalSsaoPass
friend

Definition at line 54 of file metalGraphicsDevice.h.

References MetalSsaoPass.

Referenced by MetalSsaoPass.

◆ MetalTaaPass

friend class MetalTaaPass
friend

Definition at line 55 of file metalGraphicsDevice.h.

References MetalTaaPass.

Referenced by MetalTaaPass.

Member Data Documentation

◆ _computePassEncoder

MTL::ComputeCommandEncoder* visutwin::canvas::MetalGraphicsDevice::_computePassEncoder

Definition at line 162 of file metalGraphicsDevice.h.

Referenced by computeDispatch().

◆ _renderPassEncoder


The documentation for this class was generated from the following files: