## TODO
* Can we reuse memory for const buffers and union blocks between shaders? Just create reasonably sized ones and fetch based on size or something.
* should gamepad come from separate interface than window?
	* keyboard input could also come from some input interface, but
	  it is tightly bound to window in windows, so we'll see.
* add more window flags
* win32: Gamepad support
	* check status of gamepad
	* what happens when you pull one out?
	* playstation
* Textures: Make the sampler state configurable
	x filtering (still needs to fix GL)
	* wrapping

* mipmap support
	* try gl first, seems easier
	* fix gl filtering filtering setting for mips

* render textures
	x d3d
	* gl
* do pixel-perfect rendering tests: render texture with 1:1 pixel matching etc
* linux windowing and input
* webgl backend
* should we expose time and delta time stuff or rely on core:time?
* think about sound

## DONE
* set filtering: for scaling up, down and mipmap
* Shaders: Reflect and expose samplers
	* generalised sampler handling for both gl and d3d
* GL backend:
	textures --- try make the d3d11 backend support multiple textures first and
	             then generalize to gl

	             for d3d11: we need to reflect bound resources for both vs and ps... if they are
	             shared then perhaps we only need one buffer -- also, should you create less buffers
	             and reuse them between shaders? So it doesn't become lots of buffers for each shader
	             permutation
	X set uniforms -- needs more type info?
	X the constant types are hardcoded to just a few types right now

* Should we sort by depth? Maybe we should use Vec3 because some 2D games rely on it?
	* I think we should.
* Do proper checks of vertex count and dispatch rendering when full
	* What happens when list is full? We can't just empty the vertex list due to being used by input assembler etc.
* basic text rendering (ended up using font stash)
	* make draw_text and load_default_font do somethig more sensible
	* look at how to properly get the scale from stb_ttf
	* compare if we are doing the same as raylib by loading its default font and drawing some things, can we make it look similar?
	* font smoothing -> make it look crisp by disabling filtering on "pixel fonts"
	* next stage: Look into something more fancy than just loading bitmaps. What can we do?
* bunnymark
* win32: Resizable window
* Flashing textures in Abyss -- Better now but still flashes when you use nose... Check the "odd_frame" stuff in d3d backend
* Is the 1/zoom in set_camera wrong? Is the matrix multiply order wrong? Hmmmm...
* Fix the depedency on D3D stuff so we can move load_shader etc
* Shaders: Basic loading
* Shaders: Constants that you can set
* Shaders: Dynamic vertex creation
* Shaders: Feed extra vertex field values using some kind of context
	* Do we need one for all corners of a rect or possibilty to supply different value for the different corners?
* Group set_tex, camera etc into a section of things that cause a render batch dispatch when changed.
* Make a texture for drawing a rectangle and remove the hack in `shader.hlsl`
* Load textures and somehow bind to shader -- split draw calls on texture switch -- needs a start of a batch system.
* Make 0, 0 be at top left (should vertex data be flipped, or is it a transformation thingy?)
* Construct vertex buffer from k2.draw_blabla calls. Do we need index buffer? 🤷‍
* Organize the d3d11 things neatly. It's just a hack right now!
	* enable debug layers
	* asserting on hresult and checking errors
	* clean up on shutdown
