Vertex Shaders are needed to transform mesh data into something that's a triangle on screen, and Pixel Shaders are needed to read textures, performing lighting, and output the final color for each pixel.Īll that just to get a simple triangle on the screen. Render State needs an implementation - it tells the GPU how to blend new geometry into the scene (transparent, solid, etc), how to update depth and stencil buffers, and how each triangle gets rasterized. Constant Buffers are needed to send uniform constant data to the GPU for use in pixel and vertex shaders. Vertex Layouts need to be defined to tell the GPU how to read that mesh data. Vertex Buffers need to be implemented to store mesh data, as do Index Buffers. However, there's a critical mass of code required to get even the simplest graphics to display. The game can already switch between DirectX 9 and 11 at runtime, so adding OpenGL to the mix shouldn't be too bad. But the game engine for Banished is written in such a way to abstract all the graphics functionality behind a common API, so porting it isn't as awful as it could be. Getting a new graphics API running in an existing game engine is somewhat painful - there's always some kind of issue or architectural oversight that doesn't meld well with new APIs.