From 5a19c03ad6e93ec02a434d8d1c0736124927bcd6 Mon Sep 17 00:00:00 2001 From: Martin Fouilleul Date: Tue, 28 Feb 2023 18:47:45 +0100 Subject: [PATCH] [canvas] removing unused old atlasing api --- src/graphics.c | 252 ------------------------------------------------- src/graphics.h | 27 +----- 2 files changed, 4 insertions(+), 275 deletions(-) diff --git a/src/graphics.c b/src/graphics.c index 528a970..fa384d3 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -3753,39 +3753,12 @@ void mg_image_draw_region(mg_image image, mp_rect srcRegion, mp_rect dstRegion) } } -void mg_image_draw_region_rounded(mg_image image, mp_rect srcRegion, mp_rect dstRegion, f32 roundness) -{ - mg_canvas_data* canvas = __mgCurrentCanvas; - if(canvas) - { - mg_image oldImage = canvas->attributes.image; - mp_rect oldSrcRegion = canvas->attributes.srcRegion; - mg_color oldColor = canvas->attributes.color; - - canvas->attributes.image = image; - canvas->attributes.srcRegion = srcRegion; - canvas->attributes.color = (mg_color){1, 1, 1, 1}; - - mg_primitive primitive = {.cmd = MG_CMD_ROUND_RECT_FILL, - .roundedRect = {dstRegion.x, dstRegion.y, dstRegion.w, dstRegion.h, roundness}}; - - mg_push_command(canvas, primitive); - } -} - void mg_image_draw(mg_image image, mp_rect rect) { vec2 size = mg_image_size(image); mg_image_draw_region(image, (mp_rect){0, 0, size.x, size.y}, rect); } -void mg_image_draw_rounded(mg_image image, mp_rect rect, f32 roundness) -{ - vec2 size = mg_image_size(image); - mg_image_draw_region_rounded(image, (mp_rect){0, 0, size.x, size.y}, rect, roundness); -} - - //------------------------------------------------------------------------------------------ //NOTE(martin): atlasing //------------------------------------------------------------------------------------------ @@ -3889,229 +3862,4 @@ void mg_image_atlas_recycle(mg_rect_atlas* atlas, mg_image_region imageRgn) mg_rect_atlas_recycle(atlas, imageRgn.rect); } -//------------------------------------------------------------------------------------------ -//NOTE(martin): image atlas -//------------------------------------------------------------------------------------------ -/* -mg_image_atlas mg_image_atlas_nil(){ return((mg_image_atlas){.h = 0}); } -bool mg_image_atlas_is_nil(mg_image_atlas atlas) { return(atlas.h == 0); } - -mg_image mg_image_nil(){ return((mg_image){.h = 0}); } -bool mg_image_is_nil(mg_image atlas) { return(atlas.h == 0); } - - -typedef struct mg_image_atlas_data -{ - mg_image image; - vec2 pos; - u32 lineHeight; - -} mg_image_atlas_data; - -typedef struct mg_image_data -{ - mg_image_atlas atlas; - mg_image image; - mp_rect rect; - -} mg_image_data; - - -mg_image_atlas_data* mg_image_atlas_data_from_handle(mg_canvas_data* canvas, mg_image_atlas handle) -{ - mg_image_atlas_data* data = 0; - mg_resource_slot* slot = mg_resource_slot_from_handle(&canvas->imageAtlasPool, handle.h); - if(slot) - { - data = slot->atlas; - } - return(data); -} - - -mg_image_data* mg_image_data_from_handle(mg_canvas_data* canvas, mg_image handle) -{ - mg_image_data* data = 0; - mg_resource_slot* slot = mg_resource_slot_from_handle(&canvas->imagePool, handle.h); - if(slot) - { - data = slot->image; - } - return(data); -} - - -mg_image_atlas mg_image_atlas_create(u32 width, u32 height) -{ - mg_image_atlas handle = mg_image_atlas_nil(); - - mg_canvas_data* canvas = __mgCurrentCanvas; - if(canvas) - { - mg_resource_slot* slot = mg_resource_slot_alloc(&canvas->imageAtlasPool); - if(slot) - { - mg_image_atlas_data* atlas = malloc_type(mg_image_atlas_data); - if(atlas) - { - memset(atlas, 0, sizeof(mg_image_atlas_data)); - atlas->image = mg_image_create(width, height); - - slot->atlas = atlas; - handle.h = mg_resource_handle_from_slot(&canvas->imageAtlasPool, slot); - } - else - { - mg_resource_slot_recycle(&canvas->imageAtlasPool, slot); - } - } - } - return(handle); -} - -void mg_image_atlas_destroy(mg_image_atlas handle) -{ - mg_canvas_data* canvas = __mgCurrentCanvas; - if(canvas) - { - mg_image_atlas_data* atlas = mg_image_atlas_data_from_handle(canvas, handle); - if(atlas) - { - mg_image_destroy(atlas->image); - free(atlas); - mg_resource_handle_recycle(&canvas->imageAtlasPool, handle.h); - } - } -} - -mp_rect mg_image_atlas_allocate(mg_image_atlas_data* atlas, u32 width, u32 height) -{ - mp_rect rect = {0, 0, 0, 0}; - vec2 atlasSize = mg_image_size(atlas->image); - - if(atlas->pos.x + width >= atlasSize.x) - { - atlas->pos.x = 0; - atlas->pos.y += (atlas->lineHeight + 1); - atlas->lineHeight = 0; - } - if( atlas->pos.x + width < atlasSize.x - && atlas->pos.y + height < atlasSize.y) - { - rect = (mp_rect){atlas->pos.x, atlas->pos.y, width, height}; - - atlas->pos.x += (width + 1); - atlas->lineHeight = maximum(atlas->lineHeight, height); - } - return(rect); -} - -mg_image mg_image_upload_from_rgba8(mg_image_atlas atlasHandle, u32 width, u32 height, u8* pixels) -{ - mg_image res = mg_image_nil(); - - mg_canvas_data* canvas = __mgCurrentCanvas; - if(canvas) - { - mg_image_atlas_data* atlas = mg_image_atlas_data_from_handle(canvas, atlasHandle); - if(atlas) - { - mg_resource_slot* slot = mg_resource_slot_alloc(&canvas->imagePool); - if(slot) - { - mg_image_data* image = malloc_type(mg_image_data); - if(image) - { - memset(image, 0, sizeof(mg_image_data)); - mp_rect rect = mg_image_atlas_allocate(atlas, width, height); - if(rect.w == width && rect.h == height) - { - image->rect = rect; - image->image = atlas->image; - image->atlas = atlasHandle; - - mg_image_upload_region_rgba8(atlas->image, rect, pixels); - - slot->image = image; - res.h = mg_resource_handle_from_slot(&canvas->imagePool, slot); - } - else - { - free(image); - mg_resource_slot_recycle(&canvas->imagePool, slot); - } - } - else - { - mg_resource_slot_recycle(&canvas->imagePool, slot); - } - } - } - } - return(res); -} - -void mg_image_recycle(mg_image handle) -{ - mg_canvas_data* canvas = __mgCurrentCanvas; - if(canvas) - { - mg_image_data* image = mg_image_data_from_handle(canvas, handle); - if(image) - { - //TODO recycle rect - free(image); - mg_resource_handle_recycle(&canvas->imagePool, handle.h); - } - } -} - -void mg_image_draw(mg_image handle, mp_rect rect) -{ - mg_canvas_data* canvas = __mgCurrentCanvas; - if(canvas) - { - mg_image_data* image = mg_image_data_from_handle(canvas, handle); - if(image) - { - mg_image_draw_region(image->image, image->rect, rect); - } - } -} - -// helpers -mg_image mg_image_upload_from_data(mg_image_atlas atlas, str8 data, bool flip) -{ - mg_image image = mg_image_nil(); - - int width, height, channels; - stbi_set_flip_vertically_on_load(flip ? 1 : 0); - u8* pixels = stbi_load_from_memory((u8*)data.ptr, data.len, &width, &height, &channels, 4); - if(pixels) - { - image = mg_image_upload_from_rgba8(atlas, width, height, pixels); - free(pixels); - } - return(image); -} - -mg_image mg_image_upload_from_file(mg_image_atlas atlas, str8 path, bool flip) -{ - mg_image image = mg_image_nil(); - int width, height, channels; - - const char* cpath = str8_to_cstring(mem_scratch(), path); - - stbi_set_flip_vertically_on_load(flip ? 1 : 0); - u8* pixels = stbi_load(cpath, &width, &height, &channels, 4); - if(pixels) - { - image = mg_image_upload_from_rgba8(atlas, width, height, pixels); - free(pixels); - } - return(image); -} -*/ - - #undef LOG_SUBSYSTEM diff --git a/src/graphics.h b/src/graphics.h index 01f166d..00fc5fe 100644 --- a/src/graphics.h +++ b/src/graphics.h @@ -213,11 +213,6 @@ MP_API void mg_image_destroy(mg_image image); MP_API void mg_image_upload_region_rgba8(mg_image image, mp_rect region, u8* pixels); MP_API vec2 mg_image_size(mg_image image); -MP_API void mg_image_draw_region(mg_image image, mp_rect srcRegion, mp_rect dstRegion); -MP_API void mg_image_draw_region_rounded(mg_image image, mp_rect srcRect, mp_rect dstRegion, f32 roundness); -MP_API void mg_image_draw(mg_image image, mp_rect rect); -MP_API void mg_image_draw_rounded(mg_image image, mp_rect rect, f32 roundness); - //------------------------------------------------------------------------------------------ //NOTE(martin): atlasing //------------------------------------------------------------------------------------------ @@ -241,24 +236,6 @@ mg_image_region mg_image_atlas_alloc_from_data(mg_rect_atlas* atlas, mg_image ba mg_image_region mg_image_atlas_alloc_from_file(mg_rect_atlas* atlas, mg_image backingImage, str8 path, bool flip); void mg_image_atlas_recycle(mg_rect_atlas* atlas, mg_image_region imageRgn); -//------------------------------------------------------------------------------------------ -//NOTE(martin): image -//------------------------------------------------------------------------------------------ -/* -typedef struct mg_image_atlas { u64 h; } mg_image_atlas; -typedef struct mg_image { u64 h; } mg_image; - -MP_API mg_image_atlas mg_image_atlas_create(u32 width, u32 height); -MP_API void mg_image_atlas_destroy(mg_image_atlas atlas); - -MP_API mg_image mg_image_upload_from_rgba8(mg_image_atlas atlas, u32 width, u32 height, u8* pixels); -MP_API void mg_image_recycle(mg_image image); -MP_API void mg_image_draw(mg_image image, mp_rect rect); - -// helpers -MP_API mg_image mg_image_upload_from_data(mg_image_atlas atlas, str8 data, bool flip); -MP_API mg_image mg_image_upload_from_file(mg_image_atlas atlas, str8 file, bool flip); -*/ //------------------------------------------------------------------------------------------ //NOTE(martin): transform, viewport and clipping //------------------------------------------------------------------------------------------ @@ -330,4 +307,8 @@ MP_API void mg_circle_fill(f32 x, f32 y, f32 r); MP_API void mg_circle_stroke(f32 x, f32 y, f32 r); MP_API void mg_arc(f32 x, f32 y, f32 r, f32 arcAngle, f32 startAngle); +//NOTE: image helpers +MP_API void mg_image_draw(mg_image image, mp_rect rect); +MP_API void mg_image_draw_region(mg_image image, mp_rect srcRegion, mp_rect dstRegion); + #endif //__GRAPHICS_H_