Fix leak in metal surface: command buffer must not be committed if there is no surface to present it to, or it will result in a huge leak in metal resources. Also wrap oc_mtl_surface_acquire_command_buffer() in an @autoreleasepool to fix a smaller leak
This commit is contained in:
parent
86b1121fbe
commit
98f131cb30
|
@ -52,6 +52,8 @@ void oc_mtl_surface_destroy(oc_surface_data* interface)
|
||||||
}
|
}
|
||||||
|
|
||||||
void oc_mtl_surface_acquire_command_buffer(oc_mtl_surface* surface)
|
void oc_mtl_surface_acquire_command_buffer(oc_mtl_surface* surface)
|
||||||
|
{
|
||||||
|
@autoreleasepool
|
||||||
{
|
{
|
||||||
if(surface->commandBuffer == nil)
|
if(surface->commandBuffer == nil)
|
||||||
{
|
{
|
||||||
|
@ -59,6 +61,7 @@ void oc_mtl_surface_acquire_command_buffer(oc_mtl_surface* surface)
|
||||||
[surface->commandBuffer retain];
|
[surface->commandBuffer retain];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void oc_mtl_surface_acquire_drawable(oc_mtl_surface* surface)
|
void oc_mtl_surface_acquire_drawable(oc_mtl_surface* surface)
|
||||||
{
|
{
|
||||||
|
@ -102,8 +105,9 @@ void oc_mtl_surface_present(oc_surface_data* interface)
|
||||||
[surface->commandBuffer presentDrawable:surface->drawable];
|
[surface->commandBuffer presentDrawable:surface->drawable];
|
||||||
[surface->drawable release];
|
[surface->drawable release];
|
||||||
surface->drawable = nil;
|
surface->drawable = nil;
|
||||||
}
|
|
||||||
[surface->commandBuffer commit];
|
[surface->commandBuffer commit];
|
||||||
|
}
|
||||||
[surface->commandBuffer release];
|
[surface->commandBuffer release];
|
||||||
surface->commandBuffer = nil;
|
surface->commandBuffer = nil;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue