// TODO:

// THIS WEEK:
// - add lights to swirling trash

// - finish blog
// - update docs with examples
// - publish

// Shaders
// - minimise shader duplication caused via pmfx includes, organise shaders better
// - resource names with name: (without space) cause probs

// material system
// - area light
// - disney brdf
// - shadow map
// - omni shadow map
// - cascaded shadow map

// engine
// - reverse depth
// - HDR pipeline
// - buffers in pmfx
// - glft
// - set name on resources
// - lazy init print function
// - texture load image from file into pmfx
// - barriers for compute
// - resolves fully data driven
// - clear buffer (uav)
// - clear buffers for compute
// - example triangle culling via execute indirect

// gfx
// - Alpha to coverage
// - Stencil Ref / Buffer
// - Texture Formats (BC etc)
// - API for copies and clears?
//      copy texture region
// - API for fence?

// ui / debug
// - per demo settings
// - thread stats
// - view menu + saving state
// - imgui not tracked within draw call stats

// DONE:
// x fix light buffer 0 issue?
// x update default configs for users
// x allow pipelines to drive the num thread in compute shaders and vice/versa
// x pass output dimensions to compute (fix mrt)
// x rename descriptor layout
// x pmfx
// x fix tests
// x apply maps / material properties + lights
// x serialise plugin data is badly formatted (needs expanding per plugin / demo)
// x render grid not tracked
// o store hotline-data commit hash for crates.io
// x ability to view images in imgui from different heaps
// x cleaup heaps
// x post process / 2d passes (compute based)
// x mip map generation
// x MRT
// x MSAA sample reads
// x aabb culling with extent / pos
// o print validation messages on panic / stack unwind? (didnt work)
// x Execute Indirect
// x gpu culling
// x pmfx-shader
// x nested structure usages are not detected correctly
// x cbuffers containing arrays not being correctly compiled in
// x structures being brought in when not used
// x cbuffer members incorrectly being brought in when referenced by scope (world_matrix, entity_world_matrix)
// x copy buffer region
// x imgui colours are not complete
// x improve ecs examples structure
// x transform normals with world matrix
// x construct tangent space
// x resource sizes passed to compute
// x render target fixed size
// x directional light
// x spot light
// x update: maths-rs
// x fix get_num_32bit_constants function
// x need to supply number of lights
// x add vec rotate 2d function
// x add cubic interpolate function
// x add cubic tangents function
// x fix rbga8/vec functions
// x cook torrence
// x oren nayar
// x different camera support
// x persistent mapped buffers
// x point light
// x create texture with heap
// x pmfx shader heap
// x compute passes
// x ecs texture
// x stats read out
// x cleaning up srvs in ecs worlds
// x uv's need flipping on geom
// x timer stats
// x structured buffer instances
// x validate states exist in pmfx
// x crash on reload
// x corretly obtain cbuffer alignment?
// x fix gpu time inconsistency
// x in client terminal / log (validation layer) / info queue
// x find offsets to bind heaps to from register bindings in shader
// x unify shader code and pmfx code
// x cubemaps do not create descriptor layout binding
// x texture3d do not create descriptor layout binding
// x 3d texture
// x pmfx static samplers should be an array - actually no!
// x texture array
// x cubemap
// x tidy push constants material
// x maths_rs 3x4 transpose doesnt work, it should return 4x3
// x sumbit one commandlist for each texture not mip
// x ddsfile
// x textures with mip_levels
// x pmfx scissor not hot-reloading
// x pmfx viewport not hot-reloading
// x pmfx blend state not hot-reloading (hashing blend state)
// x maths_rs hsv to rrgb doesnt work (generics) & has no test
// x blend examples (push constants?)
// x 3x4 world matrix
// x pmfx should allow pragmas / copy them into source
// x pmfx should be able to foward -args to the toolchain
// x billboard?
// x ecs leaks
// x batch dep marker
// x update pmbuild and pmfx (again)
// x move primitives from ecs to hotline (fix helix uvs and capsule gaps)
// x batch cbuffer instances
// x pmfx v2 docs (texture and render graph)
// x bug with pmfx inherit (test.pmfx cannot inherit and extend pipelines)
// x bug with merging pmfx, with shared keys. the old ones are not recirsively merged / overwritten
// x fix issues with crash when a return happens between begin/end render pass
// x gfx::buffer should need to be mut for update
// x propagate sample mask??
// x Draw Instanced 
// x draw instanced
// x pmfx v2 docs (view)
// x batch vertex instance buffer
// x GPU Query
// x hot reload progress / indicator in status bar
// x markers on ecs render passes
// x add gif to the github page, + link to video
// x handle serde errors when building pipeline
// x RGBA write issue
// x pmfx docs for v1 and v2
// x Blend
// x status bar
// x time resource for systems
// x spring
// x move rotate system out of ecs into ecs_examples
// x core update (cams, configs)
// x raster examples
// x update maths 0.1.9
// x update matrices ecs
// x trapezoid
// x chamfer cube
// x quick video
// x update hotline-data
// x update pmfx shader
// x add textures to dock
// x option to save config and ini to disk location
// x remove relative path for the repo's plugins
// x recursive includes?
// x rename basic > debug
// x tourus (uv)
// x single pipeline render function
// x update cameras from scene
// x handle missing pipeline
// x handle missing view
// x handle missing camera
// x billboard
// x shift sphere seam
// x quick tidy on pmfx files and layout
// x msaa + texture format reloads
// x reply to pmtech user
// x fix shader test failures
// x capsule
// x textures
// x improve render function / naming and passing of view
// x docked defaults
// x imgui push / pop colour
// x show schedule and errors
// x error handling !!!! ->
// x - missing plugin
// x - missing system func
// x - missing view
// x fix tests and samples
// x fix warnings
// x pmbuild running on close?
// x cone
// x prsims
// x hemi-sphere
// x vs code build and run (debug and release)
// x phi, inv phi to maths. generic sin cos?
// x raster
// x pmfx not reloading
// x wireframe
// x MSAA
// x icosasphere
// x watch files in folders
// x save imgui locations more reliably
// x plane - heightmap
// x download data
// x github ref to build tools?
// x readme / docs
// x combo size
// x hash map utils (add if new)
// x name threads
// x pmfx mltiple files
// x preent redundant pmfx pipeline compilation
// x plugin specific serialisation structs into user-config
// x update systems, setup systems
// x specify pmfx
// x file wataches from pmfx -w
// x input system
// x selectable demo
// x enumerate plugins
// x delete plugin mem on shutdown
// x respect imgui flags (hovered / accept input) in camera controller
// x improve reloader / responder create / grouping
// x ui call hooks into plugin
// x hotline dynamic lib (build times)
// x consolidate sync code (responder ref)... downcast helper?
// x - add files
// x persistent plugins
// x different lib build commands
// x build lib on load
// x handle compile failures
// x plugin collecion into plugin module
// x persistent console window position
// x select / add plugin lib from file
// x quick dev ui tidy up
// x hot-reload shaders, pipelines, views
// x watching rebuilding
// x -- pmfx
// x plugin and reloader modules
// x reload new plugins
// x client - rename from host
// x plugin libs release vs debug
// x pipeline permutations
// x reload sync
// x build schedule
// x resources > world
// x core pmfx shaders etc
// x streamline install / deployment (pmbuild, pmfx etc)
// x build schedule from file
// x core functions
// x pipeline for pass format
// x host app
// - window utility remember maximised flags
// x window utilities remember position
// x hot-reload lib
// x fix validation warning on resize
// x handle dropped resources on rebuild
// x pass view name to blit to pmfx
// x wait frames before properly dropping gpu resources (textures)
// x ratio tracking pmfx
// x basic graphs
// x auto barriers
// x depth stencil as texture
// x move 'add' code into startup system - not possible? other ways of creating startup systems?
// x copy or clone buffers? (cloning for now)
// x setup functions
// x update funcions
// x render functions
// x depth stencil state from pmfx
// x blit main buffers to backbuffer
// x path utilities
// x imgui into hotline context
// x remove swap chain dependencies
// x reduce cmd buf dependency
// x clear from pmfx
// x depth buffer pmfx
// x views from pmfx
// x render passes
// x render targets from pmfx
// x get docs passing
// x automate cargo publish
// x pmfx mesh and view
// x move hotline context and make generic
// x render cube -> render cubes
// x focus checks for imgui input hovers etc
// x debug rendering 3d
// x camera
// x Automate docs update
// x pmfx Descriptor Layout
// x x bindings
// x x push constants
// x x samplers
// x pmfx pipelines
// x add dxc and support for sm_6_0
// x Math lib
// x bindless in pmfx
// x pmfx Input Layout
// x debug rendering 2d
// x automate pmbuild / pmfx update
// x Shaders from IR
// x pmfx Shaders
// x build scripts
// x make const conversion functions
// x clean up video textures properly
// x av documentation
// x bug with bad chars being passed as ext filters
// x crash on shutdown not seletcing correct wndproc
// x add glyph ranges to imgui info
// x font awesome
// x fix location of imgui.ini and .gitignore
// x video player pause
// x open file dialog
// x imgui image
// x change source
// x WMF errors
// x swap chain create return result
// x single error type?
// x CI runner
// x Handle CPU access flags for buffers in a nicer way
// x Handle buffers with no data
// x Readback request doesnt unmap
// x keyboard input
// x imgui mouse cursors
// x Imgui platform
// x Imgui multi windows
// x enum monitors
// x monitor DPI
// x Move Imgui to instance instead of procedural api with static
// x Imgui renderer
// x spelling mistake independent.
// x change get srv handle to be Option instead of sential -1
// x Depth Stencil Target
// x Depth stencil heap
// x state / info defaults
// x Render Target Formats From Pass
// x Select adapter from name
// x winpixeventruntime
// x Blend State
// x Depth Stencil State
// x Raster State
// x Topology
// x Crash on resize
// x Enumerate adapters
// x Enumerate Device Info
// x GPU Marker
// x Compute
// x docs on website
// x Render Target
// x Heaps? + free list?
// x device info with default heap sizes
// x do we need `static on a trait? (for now removed)
// x descriptor table shader visibility
// x pipeline result error handling
// x srv index from Texture and Buffer
// x swap chain create info
// x render pass in swap chain
// x rtv heaps in device not swap chain
// x call super traits = use super::Trait as SuperTrait (to avoid ambiguity)
// x render pass result error handling
// x texture result error handling
// x shaders result / error handling
// x buffers result / error handling
// x null terminate strings passed to windows-rs **
// x Constant Buffer
// x Transition barriers
// x Bindless texture array
// x Render Passes
// x Root Signature == DescriptorLayout **
// x Pipeline->RootSignature
// x    Input Layout
// x    Static Samplers
// x    Push Constants
// x Track transitions and manually drop **
// x Push constants
// x viewport rect position must be stomped to 0
// x Triangle as test (fix shader compile issue)
// x Texture
// x Backbuffer readback / resource readback
// x how to properly use bitmask and flags?
// x remove "Graphics" and move "Instance" to "App"
// x Index Buffer
// x rust fmt line length
// x samples
// x PSO
// x Shaders from source
// x Viewport
// x Scissor
// x Bind Viewport
// x Bind Scissor
// x Draw Call
// x Resize Swap Chain
// x Vsync not working?
// x Buffer
// x Create Buffer
// x Bind Vertex Buffer
// x move tests
// x move files / modules / libs
// x docs