diff --git a/src/graphics.c b/src/graphics.c index ad9bfbf..38658c4 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -2977,7 +2977,8 @@ void mg_flush_commands(int primitiveCount, mg_primitive* primitives, mg_path_elt if(canvas->backend && canvas->backend->render) { - canvas->backend->render(canvas->backend, primitiveCount, primitives, canvas->path.startIndex + canvas->path.count, pathElements); + int eltCount = canvas->path.startIndex + canvas->path.count; + canvas->backend->render(canvas->backend, canvas->clearColor, primitiveCount, primitives, eltCount, pathElements); return; } diff --git a/src/graphics_internal.h b/src/graphics_internal.h index d38e8da..e7d3509 100644 --- a/src/graphics_internal.h +++ b/src/graphics_internal.h @@ -205,6 +205,7 @@ typedef struct mg_primitive } mg_primitive; typedef void (*mg_canvas_backend_render_proc)(mg_canvas_backend* backend, + mg_color clearColor, u32 primitiveCount, mg_primitive* primitives, u32 eltCount, diff --git a/src/mtl_renderer.m b/src/mtl_renderer.m index 911cc10..ae28bba 100644 --- a/src/mtl_renderer.m +++ b/src/mtl_renderer.m @@ -62,15 +62,15 @@ static void mg_update_path_extents(vec4* extents, vec2 p) } void mg_mtl_canvas_render(mg_canvas_backend* interface, - u32 primitiveCount, - mg_primitive* primitives, - u32 eltCount, - mg_path_elt* pathElements) + mg_color clearColor, + u32 primitiveCount, + mg_primitive* primitives, + u32 eltCount, + mg_path_elt* pathElements) { mg_mtl_canvas_backend* backend = (mg_mtl_canvas_backend*)interface; - //TODO: update rolling buffers - + //NOTE: update rolling buffers dispatch_semaphore_wait(backend->bufferSemaphore, DISPATCH_TIME_FOREVER); backend->bufferIndex = (backend->bufferIndex + 1) % MG_MTL_INPUT_BUFFERS_COUNT; @@ -264,7 +264,8 @@ void mg_mtl_canvas_render(mg_canvas_backend* interface, //TODO: clear here? MTLRenderPassDescriptor* renderPassDescriptor = [MTLRenderPassDescriptor renderPassDescriptor]; renderPassDescriptor.colorAttachments[0].texture = surface->drawable.texture; - renderPassDescriptor.colorAttachments[0].loadAction = MTLLoadActionLoad; + renderPassDescriptor.colorAttachments[0].loadAction = MTLLoadActionClear; + renderPassDescriptor.colorAttachments[0].clearColor = MTLClearColorMake(clearColor.r, clearColor.g, clearColor.b, clearColor.a); renderPassDescriptor.colorAttachments[0].storeAction = MTLStoreActionStore; id renderEncoder = [surface->commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor];