When it comes to sprite rendering, I have mostly used XNA SpriteBatch directly or used a ported SpriteBatch to C++ to draw sprites in the past. However I always found XNA SpriteBatch limiting at times, expectially if you wanted to have different parameters passed to your pixel shader or if you wanted to use a different vertex input layout.
Considering that XNA was designed around Direct3D 9 and since then GPU hardware have progressed a lot since then and we could use modern GPU features to render lots of sprites more efficiently. But which method will give us the best result for our needs? In order to answer this question, I decided to sacrifice some time in the development of our first game BioMech Catalyst to explore various options to find the best way for our engine c0ld to render lots and lots of sprites and share my findings.