package examples import "core:fmt" import "core:log" import "core:mem" import "core:os" EX_HELLOPE_SHAPES :: "hellope-shapes" EX_HELLOPE_TEXT :: "hellope-text" EX_HELLOPE_CLAY :: "hellope-clay" EX_HELLOPE_CUSTOM :: "hellope-custom" EX_TEXTURES :: "textures" EX_GAUSSIAN_BLUR :: "gaussian-blur" EX_GAUSSIAN_BLUR_DEBUG :: "gaussian-blur-debug" AVAILABLE_EXAMPLES_MSG :: "Available examples: " + EX_HELLOPE_SHAPES + ", " + EX_HELLOPE_TEXT + ", " + EX_HELLOPE_CLAY + ", " + EX_HELLOPE_CUSTOM + ", " + EX_TEXTURES + ", " + EX_GAUSSIAN_BLUR + ", " + EX_GAUSSIAN_BLUR_DEBUG main :: proc() { //----- General setup ---------------------------------- // Temp track_temp: mem.Tracking_Allocator mem.tracking_allocator_init(&track_temp, context.temp_allocator) context.temp_allocator = mem.tracking_allocator(&track_temp) // Default track: mem.Tracking_Allocator mem.tracking_allocator_init(&track, context.allocator) context.allocator = mem.tracking_allocator(&track) // Log a warning about any memory that was not freed by the end of the program. // This could be fine for some global state or it could be a memory leak. defer { // Temp allocator if len(track_temp.bad_free_array) > 0 { fmt.eprintf("=== %v incorrect frees - temp allocator: ===\n", len(track_temp.bad_free_array)) for entry in track_temp.bad_free_array { fmt.eprintf("- %p @ %v\n", entry.memory, entry.location) } mem.tracking_allocator_destroy(&track_temp) } // Default allocator if len(track.allocation_map) > 0 { fmt.eprintf("=== %v allocations not freed - main allocator: ===\n", len(track.allocation_map)) for _, entry in track.allocation_map { fmt.eprintf("- %v bytes @ %v\n", entry.size, entry.location) } } if len(track.bad_free_array) > 0 { fmt.eprintf("=== %v incorrect frees - main allocator: ===\n", len(track.bad_free_array)) for entry in track.bad_free_array { fmt.eprintf("- %p @ %v\n", entry.memory, entry.location) } } mem.tracking_allocator_destroy(&track) } context.logger = log.create_console_logger() defer log.destroy_console_logger(context.logger) args := os.args if len(args) < 2 { fmt.eprintln("Usage: examples ") fmt.eprintln(AVAILABLE_EXAMPLES_MSG) os.exit(1) } switch args[1] { case EX_HELLOPE_CLAY: hellope_clay() case EX_HELLOPE_CUSTOM: hellope_custom() case EX_HELLOPE_SHAPES: hellope_shapes() case EX_HELLOPE_TEXT: hellope_text() case EX_TEXTURES: textures() case EX_GAUSSIAN_BLUR: gaussian_blur() case EX_GAUSSIAN_BLUR_DEBUG: gaussian_blur_debug() case: fmt.eprintf("Unknown example: %v\n", args[1]) fmt.eprintln(AVAILABLE_EXAMPLES_MSG) os.exit(1) } }