- Font loading
- Measuring for formatting & justification
- Utf8 Glyph walking
- Commented example in oogabooga/examples/text_rendering.c
- Small 2D renderer refactor
- 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
- 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 (scaled_width vs pixel_width)
- in minimal example, renamed hammer_xform -> rect_xform
- Added asserts to make sure we detect similar bugs faster
- Made simd shippable & configurable
- Some documentation in oogabooga.c on configuration
- Very optimized release build script
- Cleaned some stuff up
- cpu.c to query cpu capabilities and intrinsics
- In init, find best available simd instruction sets and assign simd function ptrs accordingly.
- Replace basic vector arithmetic procs with simd implementations
- Refactor drawing to keep blocks persistent in memory
- Make string usage easier & more consisten (macros for string vs const char*)
- rdtsc intrinsic (get cycle count)
- Profiling macros (generates a google trace json)
- Write D3D11 debug messages to stdout
- String_Builder & thorough tests for it
- I didn't get rotation going quite right with the xform, but it's 2am goodnight
- Smashed my head and had bad thoughts about microsoft many times
- stuff
- lotsa example code in entry.c
- We just add to a frame of quads which the renderer deals with in gfx_update
- draw_quad, draw_rect, draw_rect_rotated
- Currently just implemented with legacy opengl, so we can't do custom shading
- Added third party code from lodepng so we can load pngs without any other dependencies (no C includes)
- ALLOCATOR_REALLOCATE
- Basic Vector2, Vector3, Vector4 stuff, and some math utilities
- Added <math.h> dependency for now.
- Graphics renderer frontend layer
- Naive get_random() implementation
- Jai-like print procedures
- %s formats 'string' and to format a char* you do %cs
- It detects if %cs pointer is outside of program memory or stack and asserts
- AND same for if a char* is passed to %s
- Print directly writes to stdout without any allocations
- Basic utlity procedures
- Buncha string tests
- Beef up assert to display file & line as well
- Don't define memcpy procedures if compiler has intrinsics for them
- Init memory arena for allocations in initialization time before heap is ready (stack memory)
- os_compare_and_swap
- Spinlock "primitive" (wrapper around a bool using compare_and_swap)
- Switched to using spinlock instead of os mutex in heap for synchronization.
- is_pointer_valid() which checks if address is in program_memory or thread stack
- Dyamically load minimum crt symbols in os backend so we don't need to #include c headers
- Some more os calls:
- write to stdout (with our string type)
- macros for variadic argument lists
- Dynamic library loading
- Some compile options that make sense for build.bat, and a build_release.bat
- oogabooga:
- Big buffer program_memory that always has same base address (goodbye serialisation problems)
- Big buffer grows as needed, crash when out of memory
- Very sexy platform abstraction & basic os call procedures
- Heap allocator around the program memory.
- Jaiyfication (context, context.allocator, push_allocator, temp allocator)
- Some tests to make sure we ooga the right boogas