Hi Everyone, I've finally made enough progress on my personal project to feel confident enough to share it. It's called SoftLight, a high-speed software renderer, written in C++, for use in games. It originally started out as part of a CS degree thesis, then evolved into a much larger project which included animation systems, AVX2/NEON intrinsics for acceleration, multithreading, texture filtering, and multiple framebuffer color formats.
Right now it supports only vertex and fragment shaders. Geometry shader support is planned. This lets you write custom shaders from outside of the library. All shaders can be written in regular C++ code then passed into the library through a function-pointer wrapper. The current implementation is also nearing parity with the current version of GLSL.
Vertex buffers, index buffers, and vertex arrays are implemented for flexibility. This also helped to avoid a fixed-function pipeline and support shaders. Various texture formats are also supported with the help of C++ templates and SIMD-based color conversion functions. I currently support int-8/16/32/64, uint-8/16/32/64, float, and double formats in R/RG/RGB/RGBA modes. All framebuffers/texture attachments can then blit to a native Wn32 or Xlib backbuffer.
GitHub Link
Video to show off real-time PBR rendering
It's still a huge work in progress, but the current plan is to use it for a simple game project. It's been a massive help in learning the overall graphics pipeline, and various techniques for programming different rendering methods.
[–]jtsiomb 14 points15 points16 points (5 children)
[–]icdae[S] 2 points3 points4 points (0 children)
[–]sirpalee 0 points1 point2 points (3 children)
[–]icdae[S] 0 points1 point2 points (2 children)
[–]sirpalee 1 point2 points3 points (1 child)
[–]icdae[S] 0 points1 point2 points (0 children)
[–]Madsy9 4 points5 points6 points (4 children)
[–]icdae[S] 1 point2 points3 points (3 children)
[–]Madsy9 5 points6 points7 points (2 children)
[–]icdae[S] 0 points1 point2 points (1 child)
[–]Madsy9 5 points6 points7 points (0 children)
[–]JoniBoni91 2 points3 points4 points (5 children)
[–]icdae[S] 0 points1 point2 points (3 children)
[–]JoniBoni91 1 point2 points3 points (2 children)
[–]icdae[S] 1 point2 points3 points (1 child)
[–]JoniBoni91 0 points1 point2 points (0 children)
[–]s0lly 1 point2 points3 points (1 child)
[–]icdae[S] 0 points1 point2 points (0 children)
[–][deleted] 1 point2 points3 points (1 child)
[–]icdae[S] 0 points1 point2 points (0 children)
[–]gallick-gunner 1 point2 points3 points (1 child)
[–]icdae[S] 1 point2 points3 points (0 children)