[#TODO] [ ] Thread primitives (Mutex, Semaphore, etc.) [ ] Thread Creation / Deletion [ ] CreateWindow [ ] ... Mouse / Keyboard inputs [*] This is the order I want to follow, because I need them in thread context. - Entry point(s) `Entry_Point_Main.cpp` -> We can have a lib_init() instead of a clear entry point for now. -> Switch from library to application once I add an entry point -> See how rjf abstracts his entry points for each platform with TCTX. [ ] 1. setup thread-local storage via thread_static (see raddbg, base_core.h, C_LINKAGE thread_static TCTX *tctx_thread_local; >> Must be assigned at entry point (arena_alloc()) >> TCTX defined in base_thread_context.h > See Base_Thread.h [Design Stuff] [ ] "Primary Thread" <- Main entry point thread [ ] "Secondary Thread" <- does all the heavy lifting for the first thread and synchronizes with the first. [ ] Tertiary threads (launched by secondary thread and awaiting work as assigned by Primary and Secondary threads) [ ] Multi-threaded by default with sync points [ ] Need bindings for Semaphore and Mutex [ ] Does calling SetProcessWorkingSetSize(.., -1, -1) cause the program to crash? Why tho. [ ] Maybe we just shouldn't do this? [ ] *our* program memory usage can be calculated by Stack Size + allocations from GPAllocator + allocations from arena. [TODO - Low priority] [ ] Implement Secure Arenas (with VirtualLock, wiping memory with RtlSecureZeroMemory) [ ] [Project Ideas] [ ](Graphics): How do I create a basic overlay that shows the time, date, cpu/gpu temps, frequency, memory usage all the time and responds to global hotkey to show more info [Documentation Notes] Main inspirations for this codebase: (1) jonathan blow & jai compiler project (2) casey muratori and "handmade" approach to software (3) ryan fleury and raddebugger codebase Always contemplate your impulses