// TODO:

// plugins
// - watch files in folders
// - systems with time
// - dependencies
// - plugin file format

// ui
// view menu
// docked defaults

// pmfx
// - update cameras from scene
// - view_texture_refs
// - error handling
// - msaa + texture format changing

// ecs
// - different camera
// - raster examples
// - billboard
// - draw instanced
// - draw indirect
// - 3D texture -> compute
// - texture
// - light
// - shadow
// - material
// - update matrices
// - update aabb's
// - culling

// log / debug / info
// - timer stats
// - thread stats
// - in editor terminal / log

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

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