// TODO:


// - pmfx mesh and view
// - render targets from pmfx
// - render passes
// - depth Stencil state from pmfx
// -- depth buffer
// -- depth test

// imgui into hotline context?
// - minimise resource handling code? macros?

// - move 'add' code into startup system - not possible? other ways of creating startup systems?

// - copy or clone buffers?

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

// - blit main buffers to backbuffer

// - path utilities
// - wait frames before properly dropping gpu resources
// - window utilities
// - - rember window and console positions
// - automate cargo publish

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

// DONE:
// 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 bindings
// - x push constants
// - 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