diff --git a/include/renderer_mtl/mtl_render_target.hpp b/include/renderer_mtl/mtl_render_target.hpp index d3866c67..90be3bde 100644 --- a/include/renderer_mtl/mtl_render_target.hpp +++ b/include/renderer_mtl/mtl_render_target.hpp @@ -70,6 +70,7 @@ struct RenderTarget { descriptor->setStorageMode(MTL::StorageModePrivate); texture = device->newTexture(descriptor); texture->setLabel(toNSString(std::string(std::is_same::value ? "Color" : "Depth") + " render target " + std::to_string(size.u()) + "x" + std::to_string(size.v()))); + descriptor->release(); } void free() { diff --git a/include/renderer_mtl/renderer_mtl.hpp b/include/renderer_mtl/renderer_mtl.hpp index 809833c7..2b5f214a 100644 --- a/include/renderer_mtl/renderer_mtl.hpp +++ b/include/renderer_mtl/renderer_mtl.hpp @@ -103,6 +103,8 @@ class RendererMTL final : public Renderer { lastColorTexture = colorTexture; lastDepthTexture = depthTexture; } + + renderPassDescriptor->release(); } void commitCommandBuffer() { diff --git a/src/core/renderer_mtl/mtl_texture.cpp b/src/core/renderer_mtl/mtl_texture.cpp index 40ae9bf2..43ae9997 100644 --- a/src/core/renderer_mtl/mtl_texture.cpp +++ b/src/core/renderer_mtl/mtl_texture.cpp @@ -18,6 +18,7 @@ void Texture::allocate() { descriptor->setStorageMode(MTL::StorageModeShared); // TODO: use private + staging buffers? texture = device->newTexture(descriptor); texture->setLabel(toNSString("Texture " + std::to_string(size.u()) + "x" + std::to_string(size.v()))); + descriptor->release(); setNewConfig(config); } @@ -43,6 +44,7 @@ void Texture::setNewConfig(u32 cfg) { samplerDescriptor->setLabel(toNSString("Sampler")); sampler = device->newSamplerState(samplerDescriptor); + samplerDescriptor->release(); } void Texture::free() { diff --git a/src/core/renderer_mtl/renderer_mtl.cpp b/src/core/renderer_mtl/renderer_mtl.cpp index 2666c992..66f3af33 100644 --- a/src/core/renderer_mtl/renderer_mtl.cpp +++ b/src/core/renderer_mtl/renderer_mtl.cpp @@ -86,7 +86,6 @@ void RendererMTL::display() { nextRenderPassName = "Display"; beginRenderPassIfNeeded(renderPassDescriptor, false, drawable->texture()); - renderPassDescriptor->release(); renderCommandEncoder->setRenderPipelineState(displayPipeline); renderCommandEncoder->setFragmentSamplerState(nearestSampler, 0);