mirror of
https://github.com/love2d/love.git
synced 2026-08-17 19:23:38 +02:00
metal: fix crash when stream buffers are resized
This commit is contained in:
@@ -745,7 +745,7 @@ void Graphics::applyShaderUniforms(id<MTLRenderCommandEncoder> renderEncoder, lo
|
||||
if (uniformBuffer->getSize() < uniformBufferOffset + size)
|
||||
{
|
||||
size_t newsize = uniformBuffer->getSize() * 2;
|
||||
delete uniformBuffer;
|
||||
uniformBuffer->release();
|
||||
uniformBuffer = CreateStreamBuffer(device, BUFFERUSAGE_VERTEX, newsize);
|
||||
uniformBufferData = {};
|
||||
uniformBufferOffset = 0;
|
||||
|
||||
@@ -58,7 +58,11 @@ public:
|
||||
{ @autoreleasepool {
|
||||
buffer = nil;
|
||||
for (int i = 0; i < BUFFER_FRAMES; i++)
|
||||
{
|
||||
if (mappedFrames[i])
|
||||
dispatch_semaphore_signal(frameSemaphores[i]);
|
||||
frameSemaphores[i] = nil;
|
||||
}
|
||||
}}
|
||||
|
||||
MapInfo map(size_t /*minsize*/) override
|
||||
@@ -91,9 +95,12 @@ public:
|
||||
if (mappedFrames[frameIndex])
|
||||
{
|
||||
/*__weak*/ dispatch_semaphore_t semaphore = frameSemaphores[frameIndex];
|
||||
StreamBuffer *pthis = this;
|
||||
pthis->retain();
|
||||
[cmd addCompletedHandler:^(id<MTLCommandBuffer> _Nonnull)
|
||||
{
|
||||
dispatch_semaphore_signal(semaphore);
|
||||
pthis->release();
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user