Todo:
	- Make axis lines always follow the same colour scheme for consistency across all tools, red for X axis, green for Y axis and blue for Z axis
	- Toggle between relative and static grid i.e, grid that moves along with the selected object or grid that remains stationary at the origin
	- Better, more accurate picking
	- Highlight if we are about to select an entity or perform the tool action like translate when mouse is hovered and an entity can be selected at that location
	- Display the projected position if we perform the action for example display what the new location would be right next to the tool mesh
	- Editor Undo
	- Scale Mode
	- Rotate Mode
	- Add other axis combinations like YZ and XY to transform tool
	- Transformation space selection for translation, rotation and scale.
	- Use actual selected entity's mesh for tool mesh when the entity already has a mesh and use a placeholder like a sphere when there is not mesh 
	- Add warning to genie build script when running on windows and WindowsSdkVersion cannot be found. This happens when the script is not run from vcvarsall command prompt
	- Improve README and add a screenshot to make the repository ready for making it public 
	- Show Transformation deltas for example a line showing where we are to where we are going to be if we click and apply the selected transformation
	- Refactor all global application state into 'Application_Context' struct. A single global instance of which is available everywhere
	? Improve bounding sphere calculation
	- Change the way lights are set as uniforms to remove snprintf calls per frame for every light attribute
	- Filter Scene heirarchy by search using entity name
	- Screen mouse coordinates to world-coordinates for aiming
	- Player projectiles and sounds
	- Console commands
	- Console command history
	- Console command help
	- Debug drawing/variable display that also works in game mode. Can be toggled with a console command. Can show variable values or plots their graphs or debug textures etc
	- Space partitioning and scene handling
	- Move Gui_State and Editor_State into game_state and modify usage as needed
	- Get editor camera speed and other settings from config file
	- Recompile Soloud on windows to use static sdl2 backend
	- Figure out a way to reduce of remove snprintf calls from render code
	- Re-Implement saving/loading scene to/from files
	- Implement storing console's scroll location and restore it when console is toggled
	- Implement collision/physics data serialization, read and write.
	- Physics forces/torque etc
	- Implement physics debug visualizations for other primitives and tri mesh shapes
	- Serializing/Deserializing physics data
	- Proper implementation of Scene struct with per-scene settings and configurations that can be loaded/saved to file instead of just dumping entities into a file
	- Necessary basic editor additions like placing objects, scaling, rotating etc
	- Add fallback shader
	- Implement Game States
	- Store Materials in new format supported by parser
	- Add model description file which has the same syntax supported by parser and modify old blender exporter to conform to new standards
	- Fix bugs with sound sources not updating
	- Add creating distributable build and uploading to itch.io account support to GENie under windows and linux.
	- Remove hardcoded numerical values from sscanf and other format strings.
	? Recalculated bounding boxes for rotated meshes
	? Wrap malloc and free calls in custom functions to track usage
	? File extension checking for asset loading
	? Only allocate hashmap bucket when required
	- Mapping actions to keybindings, for example map action "Jump" to Space key etc
	? Add marking or queuing up custom meshes for debug render with particular transform and color for rendering bounding spheres for example
	? Interleaved vbos for meshes and changes to blender exporter accordingly
	- Enumerate and save all the uniform and attribute positions in shader when it is added and cache them in shader object?
	? Better handling incase assets folder is not found
	- Write entity to/from file
	- Ogg format loading and playback
	- Sound streaming
	- Implment missing sound source properties (inner/outer cone, getting sound source data)
	- Shadow maps
	- Print processor stats and machine capabilites RAM etc on every run to log.
	- Do input maps really need to be queried by their string names?
	- Write default config/keybindings etc to file if none are found in preferences dir
	- Multisampled textures and framebuffers
	- Validate necessary assets at game launch
	- Gamma correctness
	- Log and debug/stats output in gui
	- Textual/Binary format for data serialization and persistance
	- Array based string type comptible with cstring(char*)
	- Reduce fps on window focus loss or minimization
	- ???
	- Profit!

Improvements:
	- Better naming semantics for example, init/deinit for initialization and cleanup and create/destroy when memory is allocated or deallocated
	- Reset mouse cursor position to the center of the screen in editor mode after the right click is released
	- Categorized entity list in editor for example different subtree for lights and static meshes
	- Depth testing for editor grid
	- Remove fixed editor windows locations and bring back floating windows

Bugs:
	- Better handling of wav format checking at load time
	- Fix light rotation/direction bugs
	- Fix lights type not being correctly saved/loaded from file
	- Fix culling
	- Fix bounding boxes not aligning in editor
	- Investigate memory usage increase when window is minimized
	- Fix hang on fullscreen toggle
	- Fix axis lines not aligning with grid lines

Done:
	* Input
	* Shaders
	* Geometry
	* change struct usage
	* change Array implementation
	* resolve vec-types sizes
	* Transform
	* Deltatime
	* Investigate about Exit() and at_exit() functions and whether to use them or not.
	* Fix readme markdown
	* Framebuffer and resolution independent rendering
	* A simpler build system without dependencies
	* Remove dependencies
	* Remove Kazmath dependency
	* Entity
	* Find a permanent solution for build system
	* Textures
	* Camera
	* Test render
	* Fix input lag and other framerate related issues
	* Materials
	* Mesh/Model
	* Add modifiers to input maps to enable combinations for example, c-x, m-k etc
	* Heirarchical Transforms
	* Materials with textures
	* Lights!
	* Fix problems with texture units
	* Fix problems with frustrum culling
	* Gui
	* Fix mouse bugs on windows
	* Configuration/Settings load/save handling
	* Fix mousewheel bugs and gui not responding to mousewheel input
	* Setup cross compilation with mingw or stick to msvc?
	* Toggleable debug drawing for meshes
	* Font selection
	* Font atlas proper cleanup
	* In second refactor pass, use entities everywhere, no need to pass in transform and model 	separately for example since they're both part of the same entity anyway
	* Show SDL dialogbox if we cannot launch at all?
	* Writing back to config file
	* Reading from config file
	* Variant -> String conversion procedure. Use in editor for debug var slots
	* Add strings and booleans to variant types
	* Fix Key release not being reported
	* OpenAL not working in releasebuilds
	* 3d sound using OpenAL
	* Fix frustum culling bugs
	* Array-based Hashmaps
	* Fix bugs with heirarchical transformations
	* Remove reduntant "settings" structures and move all configuration stuff to config variables
	* Log output to file on every run
	* Add option to specify where to read/write files from instead of being hard-coded assets dir
	* Fix input map bugs
	* Live data views in editor
	* Camera resize on window reisze
	* Resizable framebuffers and textures
	* Support for multiple color attachments in framebuffers?
	* Better way to store and manage textures attached to framebuffers
	* Variant type
	* Editor
	* Fix frustum culling sometimes not working
	* Compile and test on windows
	* Fix mouse bugs
	* Fix issues with opengl context showing 2.1 only
	* Improve this readme
	* Replace orgfile with simple text readme and reduce duplication
	* Fix camera acting all weird when right click is held
	* Fix README to conform with markdown syntax
	* Added video driver selection to make game launch under wayland or x11 on linux.
	* Separate game code into a dynamical library that can be reloaded at runtime.
	* Move game, common and game library related code into separate folders.
	* Fixed game crashing on exit after game library has been reloaded more than once.
	* Made game compile and run under windows with visual studio 2017 using GENie
	* Implemented file copy and file delete on windows and linux.
	* Implemented a work-around for dll locking on windows by creating a copy of the game lib at launch and when reloading,
	  unloading the current dll, deleting it and creating new copy of the updated dll and loading that
	* Added file copy and delete to platform api
	* Made dll reloading workaround compatilble on linux
	* Default keybindings as fallback
	* Implemented writing scene to file
	* Fixed space not being added after light entities are written to file by adding missing new-line
	* Fixed error caused by the way eof was checked in scene file 	
	* Camera fbo params are now written to file when entity is saved
	* Fixed several bugs with entity loading
	* Removed duplicate parsing logic
	* Fixed bugs in stripping key name for input map
	* Modify entity loading logic to use the new parsing code by parsing all entity properties into a hashmap first then recreating entity from that
	* Implmented writing to file through the new Parser and Parser_Objects
	* Changed Config to read/write using new Parser and Parser_Objects
	* Implemented Reading/Writing keybindings using new parser object
	* Replaced OpenAL with Soloud with SDL2 backend
	* Implemented sound/listener loading from scene file
	* Finished loading scene from file
	* Initial implementation of immediate-mode batched sprite render
	* Fixed bugs with shader include file pre-processor
	* Fixed bugs with editor's camera property viewer
	* Fixed bugs related to changing camera projection
	* Fixed bugs with sprite batch renderer not working with projection matrix
	* Fixed broken orthographic camera
	* Implement necessary changes to run Soloud on linux
	* Moved third party libs/include directories into root/lib and root/include. Put common includes like header-only libs into root/include/common and others which require platform specific stuff into root/include/linux etc.
	* Got rid of pkg-confg and system-installed SDL2 dependancy on linux and instead put custom compiled SDL libs in libs folder similar to how we're handling it in windows
	* Proper physics time-step and speed
	* Proper handling of rigidbody associated with an entity and notifying it of movement or collision
	* Added physics spheres and other primitive shapes
	* Separated collision shape and rigidbody
	* Implemented Getting/Modifying primitive physics shapes' values like length, radius etc
	* Update physics if entity position/rotation/scale etc are changed
	* Implemented Physics raycasting
	* Implemented immediate mode renderer that can draw arbitrary points, lines and triangles
	* Converted IM_Vertex array to only be used as temporary storage for vertices between begin and end calls
	* Implemented Debug physics mesh drawing for box and sphere primitives
	* Completed Phase 1 of codebase refactoring
	* Improved editor camera handling
	* Re-implemented showing all the entities in the editor
	* Player init, update, visual representation and movement
	* Switching between editor and game mode/cameras
	* In-game basis for scrollable console/log-viewer
	* Console log output
	* Console error/warning output
	* Implemented Auto scrolling to the bottom in console
	* Implemented screen coordinate to ray conversion and ray-sphere collision
	* Split todo and readme into two files
	* Replace all renderer_check_gl calls with GL_CHECK macro
	* Fixed Console bug when enabled in editor mode
	* Migrated from bitbucket to github and from mercurial back to git
	* Removed the game executable and game library split.
	* Event Subsystem
	* Fixed mouse button press/release behaviour by using event callbacks for editor mouse picking
	* Ray picking for editor
	* Highlight entity selected in editor in a specific color
	* Implemented showing a placeholder when an entity other than a static mesh is selected
	* Prevented ray casting when clicking on editor window and buttons
	* Implemented handling drawing other entity types that can be selected in the editor but are not static meshes
	* Implemented proper topbar
	* Changed config vars are used.
	* Changed all usages of bool types and nuklear causing buggy behaviour in editor code by using int instead of bool or by using variants of the functions that do take int as parameter instead of int*
	* Added Grid to editor
	* Added Editor settings window and grid configuration to editor settings window
	* Specific rendering mode for editor related rendering	
	* Editor modes for Transform, Rotate, Scale that operate similar to vim or blender.
	  Modes can be toggled by hotkeys and the operation will be applied to the selected object.
	  By default, we work on the ground axis i.e the xz plane and when we have alt pressed, we work in the vertical or y axis.
	* Move plane creation into its own function 
	* De-select object on escape key in editor
	* Vertical translation in translate mode
	* Axis selection/cycling
	* Axis switching and returning back to previously selected axis after releasing alt in translate mode
	* Display tool/cursor location in editor statusbar
	* Displaying camera position and tool transformation space in top bar
	* Display editor camera parameter adjustment in top bar
	* Display Transform mode selection in top bar
	* Display Axis selection in top bar
	* Immediate mode render order, drawing axis and helpers on top of grid
	* Draw coloured axes lines at world origin or grid origin

