[canvas] removing unused old atlasing api
This commit is contained in:
		
							parent
							
								
									3615775168
								
							
						
					
					
						commit
						5a19c03ad6
					
				
							
								
								
									
										252
									
								
								src/graphics.c
								
								
								
								
							
							
						
						
									
										252
									
								
								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 | ||||
|  |  | |||
|  | @ -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_
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue