David Piuva's Software Renderer is a static C++ library for graphics and user interfaces. You don't need to install OpenGL or any third party media layer. Replace all of that with one static library that calls the system directly and actually works. No more missing drivers, complex extension wranglers, feature flags, awkward legacy limitations, closed proprietary features, driver bugs, blue-screen crashes, shader dialects, random funky colors, failed pixel alignments, incompatible screen resolutions... This library takes the safe route and still gets more than enough performance for most needs.
The current beta runs on Linux and Windows. If you find a bug in the library, you can change it in the source code and let the library recompile automatically using the build system. Just don't forget to make a pull-request with your bug fix, so that it won't break next time you pull an update.
The main feature is to efficiently render isometric scenes on the CPU using a set of depth-buffered 2D draw calls. By pre-rendering diffuse, normal and position maps using an offline rendering tool, the game can then have unlimited detail level like in old 2D games, but with pixel-exact depth masking and modern dynamic light. The Sandbox example demonstrates how this technique can be used for real-time light sources with deferred normal mapping and depth based shadows cast from 3D models in a lower triangle count.
You don't need to emulate 2D graphics on top of a complex 3D graphics pipeline. The software-renderer is a non-equivalent replacement for OpenGL that focuses on having more than just 3D. While the GPU might struggle to render a retro 2D game in 60 frames per second because of 3D pipeline overhead and many small sprites being drawn, a CPU can reach 300 frames per second with the same dynamic light effects by designing the game around how cache prediction works and not having a huge overhead from draw calls.
Zero dependency library All features are one implementation in one static library. It only depends on the C++ language itself and C compiler extensions. All dynamic dependencies like X11 are added when needed by the application to keep the core clean.
Simple open source license terms Mainly using the permissive ZLIB open source license, and public domain for the rest. The stb_image library is included in the source code under public domain terms, so that you don't have to worry about getting sued over forgetting a name in the credits of a binary release, or having someone pulling back contributions in anger. It's all non-revocable and doesn't require crediting. Forced crediting don't generate much attention to open source projects anyway, so it's better to have a few users actively endorsing it.
Full screen the hardware agnostic way Instead of trying to change the display to a random resolution and wait for the crash like most media layers do, the resolution can be up-scaled on the CPU. Multi-threading is used to upload the resulting image to the screen while the application does single-threaded logic for the next frame.
2D features:
Isometric features:
3D rasterization features:
Graphical user interface features: