I would love to be able to sit down and discuss options for reorganiseing the abstraction layer, I have been asking for literaly years now, and I had a bunch of realy nice code done on my side for organiseing geometry. I'd like to keep D3D support if we can, and I don't think we'll have to sacrafice much to do it.
the graphics code desperately needs reoganisation, look at either OGL or D3D *_render_buffer functions, they are terifying, when in fact they should be small and compact, doing nothing but rendering buffers, instead they are handleing multable passes and all sorts of material settings, and all the compatability code therein.
and look at set_bitmap, this one function is the only way to change alpha blend modes, and texture filtering, WHY!?!?!? there should be three seperate functions, and each one should also be able to specify wich of the 8 texture stages it effects, rather than just the fisrt stage, leaveing the API level code to figure out how to handle stuff by _global ints_ storing the handles of texture files to be used in effects, wich double in posable complexity every time an new one is added. I know I started the whole global int thing, but realy that was a design flaw made by a first year coder who could barely remember the syntax of a for loop, and even then I knew it was a bad idea, I realy expected that to be just a temporary bandaid was of bypassing the crappy bitmap setting code, why we are still useing my horrably flawed anti-pattern after all these years I can't fathom.
I konw we can make a nice simple abstraction layer that everyone would be happy with at least as far as the render level stuff goes (I have no idea how OGL handles things like how it handles blending between it's equivelent to texture stages, but if nothing else we could make one big struct that represented all the settings)
I realy wish I could talk to someone with OGL knowlege about this.