|
VisuTwin Canvas
C++ 3D Engine — Metal Backend
|
#include <platform/graphics/metal/metalGraphicsDevice.h>
Public Member Functions | |
| MTL::CommandQueue * | commandQueue () const |
| void | computeDispatch (const std::vector< Compute * > &computes, const std::string &label="") override |
| std::unique_ptr< gpu::HardwareTexture > | createGPUTexture (Texture *texture) override |
| std::shared_ptr< IndexBuffer > | createIndexBuffer (IndexFormat format, int numIndices, const std::vector< uint8_t > &data={}) override |
| std::shared_ptr< RenderTarget > | createRenderTarget (const RenderTargetOptions &options) override |
| std::shared_ptr< Shader > | createShader (const ShaderDefinition &definition, const std::string &sourceCode="") override |
| std::shared_ptr< VertexBuffer > | createVertexBuffer (const std::shared_ptr< VertexFormat > &format, int numVertices, const VertexBufferOptions &options=VertexBufferOptions{}) override |
| std::shared_ptr< VertexBuffer > | createVertexBufferFromMTLBuffer (const std::shared_ptr< VertexFormat > &format, int numVertices, MTL::Buffer *externalBuffer) |
| std::shared_ptr< VertexBuffer > | createVertexBufferFromNativeBuffer (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 ¶ms) override |
| void | executeComposePass (const ComposePassParams ¶ms) override |
| void | executeDepthAwareBlurPass (const DepthAwareBlurPassParams ¶ms, bool horizontal) override |
| void | executeDofBlurPass (const DofBlurPassParams ¶ms) override |
| void | executeSsaoPass (const SsaoPassParams ¶ms) 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< RenderTarget > | backBuffer () const |
| void | clearQuadTextureBindings () |
| bool | contextLost () const |
| CullMode | cullMode () const |
| int | drawCallsPerFrame () const |
| void | frameEnd () |
| void | frameStart () |
| std::shared_ptr< Shader > | getCachedShader (const std::string &name) const |
| bool | hdrPass () const |
| bool | insideRenderPass () const |
| const Material * | material () const |
| int | maxSamples () const |
| bool | quadRenderActive () const |
| Texture * | quadTextureBinding (const size_t slot) const |
| const std::array< Texture *, 8 > & | quadTextureBindings () const |
| std::shared_ptr< VertexBuffer > | quadVertexBuffer () |
| const ReflectionBlurParams & | reflectionBlurParams () const |
| Texture * | reflectionDepthMap () const |
| Texture * | reflectionMap () const |
| void | removeTarget (RenderTarget *target) |
| std::shared_ptr< RenderTarget > | renderTarget () const |
| int | renderVersion () const |
| void | resetDrawCallsPerFrame () |
| void | resizeCanvas (int width, int height) |
| int | samples () const |
| Texture * | sceneDepthMap () 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 ¶ms) |
| 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 |
| Texture * | ssaoForwardTexture () 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> | |
| EventHandler * | fire (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>) | |
| EventHandler * | off (const std::string &name, Callback &&callback, void *scope=nullptr) |
| EventHandler * | off (const std::string &name="", const HandleEventCallback &callback=HandleEventCallback(), void *scope=nullptr) |
| EventHandler * | offByHandle (EventHandle *handle) |
| template<typename Callback> requires (!std::is_same_v<std::decay_t<Callback>, HandleEventCallback>) | |
| EventHandle * | on (const std::string &name, Callback &&callback, void *scope=nullptr) |
| EventHandle * | on (const std::string &name, HandleEventCallback callback, void *scope=nullptr) |
| template<typename Callback> requires (!std::is_same_v<std::decay_t<Callback>, HandleEventCallback>) | |
| EventHandle * | once (const std::string &name, Callback &&callback, void *scope=nullptr) |
| EventHandle * | once (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 | |
| EventHandle * | addCallback (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 |
Metal implementation of the graphics device. Inherits from GraphicsDevice and implements Metal-specific rendering functionality.
Definition at line 45 of file metalGraphicsDevice.h.
| visutwin::canvas::MetalGraphicsDevice::MetalGraphicsDevice | ( | const GraphicsDeviceOptions & | options | ) |
Definition at line 58 of file metalGraphicsDevice.cpp.
References _renderPassEncoder, visutwin::canvas::RenderTargetOptions::graphicsDevice, visutwin::canvas::RenderTargetOptions::name, visutwin::canvas::RenderTargetOptions::samples, visutwin::canvas::GraphicsDevice::setBackBuffer(), and visutwin::canvas::GraphicsDeviceOptions::swapChain.
| visutwin::canvas::MetalGraphicsDevice::~MetalGraphicsDevice | ( | ) |
Definition at line 134 of file metalGraphicsDevice.cpp.
References _renderPassEncoder.
|
inlinenodiscard |
Definition at line 75 of file metalGraphicsDevice.h.
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 385 of file metalGraphicsDevice.cpp.
References _computePassEncoder, visutwin::canvas::GraphicsDevice::_insideRenderPass, and _renderPassEncoder.
|
overridevirtual |
Implements visutwin::canvas::GraphicsDevice.
Definition at line 279 of file metalGraphicsDevice.cpp.
References visutwin::canvas::GraphicsDevice::Texture.
|
overridevirtual |
Implements visutwin::canvas::GraphicsDevice.
Definition at line 306 of file metalGraphicsDevice.cpp.
|
overridevirtual |
Implements visutwin::canvas::GraphicsDevice.
Definition at line 316 of file metalGraphicsDevice.cpp.
|
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.
|
overridevirtual |
Implements visutwin::canvas::GraphicsDevice.
Definition at line 286 of file metalGraphicsDevice.cpp.
| 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().
|
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().
|
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().
|
overridevirtual |
Implements visutwin::canvas::GraphicsDevice.
Definition at line 1006 of file metalGraphicsDevice.cpp.
References visutwin::canvas::GraphicsDevice::_insideRenderPass, _renderPassEncoder, visutwin::canvas::RenderPass::colorArrayOps(), visutwin::canvas::GraphicsDevice::RenderPass, and visutwin::canvas::GraphicsDevice::renderTarget().
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 352 of file metalGraphicsDevice.cpp.
References _renderPassEncoder, and visutwin::canvas::GraphicsDevice::renderTarget().
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 321 of file metalGraphicsDevice.cpp.
References _renderPassEncoder, and visutwin::canvas::GraphicsDevice::renderTarget().
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 370 of file metalGraphicsDevice.cpp.
References _renderPassEncoder, and visutwin::canvas::GraphicsDevice::renderTarget().
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 361 of file metalGraphicsDevice.cpp.
References _renderPassEncoder, and visutwin::canvas::GraphicsDevice::renderTarget().
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 343 of file metalGraphicsDevice.cpp.
References _renderPassEncoder, and visutwin::canvas::GraphicsDevice::renderTarget().
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 329 of file metalGraphicsDevice.cpp.
References _renderPassEncoder, visutwin::canvas::GraphicsDevice::renderTarget(), and visutwin::canvas::GraphicsDevice::Texture.
|
inlinenodiscard |
Definition at line 76 of file metalGraphicsDevice.h.
|
inlinenodiscard |
Definition at line 74 of file metalGraphicsDevice.h.
Referenced by visutwin::canvas::gpu::MetalBuffer::allocate(), and visutwin::canvas::gpu::MetalTexture::create().
|
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().
|
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.
|
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.
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 461 of file metalGraphicsDevice.cpp.
References _renderPassEncoder.
|
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().
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 538 of file metalGraphicsDevice.cpp.
References visutwin::canvas::GraphicsDevice::Texture.
|
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.
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 530 of file metalGraphicsDevice.cpp.
|
overridevirtual |
Implements visutwin::canvas::GraphicsDevice.
Definition at line 1066 of file metalGraphicsDevice.cpp.
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 1088 of file metalGraphicsDevice.cpp.
References _renderPassEncoder, and visutwin::canvas::GraphicsDevice::setScissor().
Referenced by startRenderPass().
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 524 of file metalGraphicsDevice.cpp.
References _renderPassEncoder.
|
overridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 1073 of file metalGraphicsDevice.cpp.
References _renderPassEncoder, and visutwin::canvas::GraphicsDevice::setViewport().
Referenced by startRenderPass().
|
overridevirtual |
Implements visutwin::canvas::GraphicsDevice.
Definition at line 192 of file metalGraphicsDevice.cpp.
Referenced by setAtmosphereUniforms(), setDynamicBatchPalette(), and startRenderPass().
|
overridevirtual |
Implements visutwin::canvas::GraphicsDevice.
Definition at line 794 of file metalGraphicsDevice.cpp.
References visutwin::canvas::GraphicsDevice::_insideRenderPass, _renderPassEncoder, visutwin::canvas::GraphicsDevice::backBuffer(), visutwin::canvas::RenderPass::colorArrayOps(), visutwin::canvas::RenderPass::colorOps(), visutwin::canvas::createDepthTexture(), visutwin::canvas::RenderPass::depthStencilOps(), visutwin::canvas::GraphicsDevice::RenderPass, visutwin::canvas::RenderPass::renderTarget(), visutwin::canvas::GraphicsDevice::setRenderTarget(), setScissor(), setViewport(), and size().
|
inlineoverridevirtual |
Reimplemented from visutwin::canvas::GraphicsDevice.
Definition at line 108 of file metalGraphicsDevice.h.
|
friend |
Definition at line 47 of file metalGraphicsDevice.h.
References MetalCoCPass.
Referenced by MetalCoCPass.
|
friend |
Definition at line 48 of file metalGraphicsDevice.h.
References MetalComposePass.
Referenced by MetalComposePass.
|
friend |
Definition at line 49 of file metalGraphicsDevice.h.
References MetalDepthAwareBlurPass.
Referenced by MetalDepthAwareBlurPass.
|
friend |
Definition at line 50 of file metalGraphicsDevice.h.
References MetalDofBlurPass.
Referenced by MetalDofBlurPass.
|
friend |
Definition at line 56 of file metalGraphicsDevice.h.
References MetalInstanceCullPass.
Referenced by MetalInstanceCullPass.
|
friend |
Definition at line 51 of file metalGraphicsDevice.h.
References MetalLICPass.
Referenced by MetalLICPass.
|
friend |
Definition at line 52 of file metalGraphicsDevice.h.
References MetalMarchingCubesPass.
Referenced by MetalMarchingCubesPass.
|
friend |
Definition at line 53 of file metalGraphicsDevice.h.
References MetalParticleComputePass.
Referenced by MetalParticleComputePass.
|
friend |
Definition at line 54 of file metalGraphicsDevice.h.
References MetalSsaoPass.
Referenced by MetalSsaoPass.
|
friend |
Definition at line 55 of file metalGraphicsDevice.h.
References MetalTaaPass.
Referenced by MetalTaaPass.
| MTL::ComputeCommandEncoder* visutwin::canvas::MetalGraphicsDevice::_computePassEncoder |
Definition at line 162 of file metalGraphicsDevice.h.
Referenced by computeDispatch().
| MTL::RenderCommandEncoder* visutwin::canvas::MetalGraphicsDevice::_renderPassEncoder |
Definition at line 161 of file metalGraphicsDevice.h.
Referenced by computeDispatch(), draw(), endRenderPass(), executeCoCPass(), executeComposePass(), executeDepthAwareBlurPass(), executeDofBlurPass(), executeSsaoPass(), executeTAAPass(), MetalGraphicsDevice(), setDepthBias(), setScissor(), setTransformUniforms(), setViewport(), startRenderPass(), and ~MetalGraphicsDevice().