// TODO:

// - download data

// client
// - minimise code move ino structure
// - reload sync
// - build schedule
// - resources > world


// - quick dev ui tidy up
// - respect imgui flags (hovered / accept input) in camera controller
// - persistent entities
// - pmfx mltiple files
// - core pmfx shaders etc
// - pipeline permutations
// - view_texture_refs
// - error handling
// - watching rebuilding
// - msaa + texture format changing

// - systems with time

// - hotline dynamic lib (build times)
// - consolidate sync code

// - timer stats
// - thread stats

// - texures from file pmfx
// - minimise resource handling code? macros?... bastard!
// - hot-reload shaders, pipelines, views

// - Blend
// - Raster

// core updates
// - update matrices
// - update aabb's
// - culling

// - GPU Timer Query
// - Draw Instanced
// - Draw Indirect
// - Stencil Ref
// - MRT
// - MSAA
// - Texture Formats (BC)

// TESTS:
// - imgui
// - pmfx
// - play video
// - primitives
// - bindless

// DONE:
// 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