We will be creating a graphics engine with Direct3D 11 and Direct2D as our native APIs. We are prioritizing reduced iteration time and simplicity for our initial implementation and we may revisit API abstractions later on.
We employ a command based rendering system similar to the work done in the Firaxis LORE engine. The means that for each pass of the rendering engine, a thread safe queue of structures that fully encapsulate the data required to render is used to collect the commands. Then when all the commands are ready, we sort and send all the instructions to the GPU.