## v0.00.005 - Z layers Renderer: - Added optional Z-sorting - Either set quad->z or call push_z_layer(s64) (and pop_z_layer()) - Enable with draw_frame.enable_z_sorting = true - Refactored the quad buffering to just be a growing quad buffer rather than a linked list of quad blocks. Your CPU will be thankful. Misc: - removed gfx_impl_legacy_opengl.c - Sorting procedures - merge_sort() - radix_sort() - sorting tests ## v0.00.004 - Custom logging, more concurrency & bugfixing Concurrency: - Refactored spinlock out of OS api (deprecated old procs) - Concurrency utilites: void spinlock_init(Spinlock *l); void spinlock_acquire_or_wait(Spinlock* l); bool spinlock_acquire_or_wait_timeout(Spinlock* l, f64 timeout_seconds); void spinlock_release(Spinlock* l); void mutex_init(Mutex *m); void mutex_destroy(Mutex *m); void mutex_acquire_or_wait(Mutex *m); void mutex_release(Mutex *m); void binary_semaphore_init(Binary_Semaphore *sem, bool initial_state); void binary_semaphore_destroy(Binary_Semaphore *sem); void binary_semaphore_wait(Binary_Semaphore *sem); void binary_semaphore_signal(Binary_Semaphore *sem); Macro MEMORY_BARRIER - Concurrency tests Docs: - custom_logger.c example to show how one can make a custom logger and have logs displayed in-game Utility: - draw_text_and_measure() which is just an overload of draw_text but it also does a measure and returns it Misc: - Added u64 thread_id to global context. This is set in main() for main thread and in thread startup when you dispatch a Thread - Fixed a bug where plain rects would be drawn with the incorrect color - Fixed a bug where quads from earlier frames would be drawn ## v0.00.003 - Fixes Random: - get_random_float64() - get_random_float32_in_range() - get_random_float64_in_range() - get_random_int_in_range() Third party: - Added 3 minimal libraries for audio decoding - dr_mp3.h: MP3 decoding - dr_wav.h: WAV decoding - stb_vorbis.c: OGG decoding - Made a global thread_local "third_party_allocator" which is set when third party libraries are used so all memory still goes through our *program_memory - Stripped all third party libraries of external dependencies (C headers) & noise Memory: - Improved assert messages to be more clear about what might be happening if they fail - Added more checks in debug to detect heap corruption and what not - Fixed a bug where the program would crash because a heap block was perfectly full Misc: - Fixed typos in examples/text_rendering.c - Fixed Y placement of window when changing the window rect - Fixed window sizing when setting scaled_width or scaled_height - Updated readme - Portable DEPRECATED macro - Deprecate os_compare_and_swap and replace with more portable compare_and_swap - Fixed a bug where the wrong image would be drawn ## v0.00.003 - Fixes Random: - get_random_float64() - get_random_float32_in_range() - get_random_float64_in_range() - get_random_int_in_range() Third party: - Added 3 minimal libraries for audio decoding - dr_mp3.h: MP3 decoding - dr_wav.h: WAV decoding - stb_vorbis.c: OGG decoding - Made a global thread_local "third_party_allocator" which is set when third party libraries are used so all memory still goes through our *program_memory - Stripped all third party libraries of external dependencies (C headers) & noise Memory: - Improved assert messages to be more clear about what might be happening if they fail - Added more checks in debug to detect heap corruption and what not - Fixed a bug where the program would crash because a heap block was perfectly full Misc: - Fixed typos in examples/text_rendering.c - Fixed Y placement of window when changing the window rect - Fixed window sizing when setting scaled_width or scaled_height - Updated readme - Portable DEPRECATED macro - Deprecate os_compare_and_swap and replace with more portable compare_and_swap - Fixed a bug where the wrong image would be drawn ## v0.00.002 - Text rendering, image manipulation, hash tables Renderer: - Pass 8-bit integers "type" and "sampler_index" to shader - Sample texture differently depending on "type" (text or regular quad) - Sample with nearest/linear min/mag depending on sampler_index - Set min/mag filtering in Draw_Quad - Images are now created and deleted directly with gfx calls rather than deferring it for gfx_update. - We can now set image sub data with gfx_set_image_data() - Images are no longer hard coded to 4 channels Text/Fonts: - Added font loading with lazy initialization/rasterization when it's needed - Load & rasterize any fonts with load_font_from_disk() - Fonts automatically rasterize glyphs into atlases and generate metrics on the fly - Measure text for very_useful metrics with measure_text() - Walk over glyphs and their metrics with walk_glyphs() - Implemented simple but powerful text rendering - Draw text with draw_text() or draw_text_xform() - See oogabooga/examples/text_rendering.c for more Other: - Added 3 simple hash functions: - 64-bit xx_hash(): Very fast hash for 64-bit values - 64-bit city_hash(): Very fast hash for short strings - 64-bit djb2_hash(): Fast hash for strings longer than 32 bytes - Made a generic get_hash() macro to detect the type you are trying to hash and call the approriate procedure - Introduced a simple (kinda slow) hash table with following procedures: - hash_table_add - hash_table_find - hash_table_contains - hash_table_set See hash_table.c for more information. - Utf8 utility: - utf8_to_utf32(): convert utf8 bytes to a single u32 codepoint - next_utf8(): Convert first utf8 character in a string to a u32 codepoint and advance the passed string to the next unicode - Renamed m4_multiply -> m4_mul for consistency - Refactored os window to be DPI aware - Window now has scaled_width, scaled_height which is the DPI-scaled size. Previous window.width & window.height are now aliased as window.pixel_height and window.pixel_width for clarity - in minimal example, renamed hammer_xform -> rect_xform