Replace OpenGL by a multi-API rendering library in Splash (filled)

Project title/description

The Splash projection mapping software allows for controlling multiple videoprojectors together to build a single projection. It is able to adapt to virtually any real geometry, as long as the surface is diffuse. Its rendering engine is built using the OpenGL API. It currently runs on platforms capable of runing Linux and handling an OpenGL 4.5 context, and has been tested successfully on x86_64 (with NVIDIA, AMD and Intel graphic cards) and aarch64 (with NVIDIA graphic cards)

However to be able to a) optimize it further and b) support more platforms (for example Raspberry Pi), it would be interesting to support more graphics API. To do this it is envisionned to replace direct use of OpenGL with an intermediate, multi-API rendering library. For now bgfx is considered.

More detailed description of the project

For now everything related to graphic rendering is done through direct calls to OpenGL, which means that OpenGL is quite intertwined with the source code of Splash. A first step could be to isolate a bit more the OpenGL calls, which would then facilitate replacing these calls with calls to the multi-API rendering library.

Expected outcomes

  • cleanup of the Splash rendering code
  • added support for at least the Vulkan API
  • possibility to run Splash on new platforms

Skills required/preferred

  • C++
  • OpenGL, other graphics API would be a plus
  • experience with game/rendering engine programming

Possible mentors

Emmanuel Durand, Christian Frisson

Expected size of project

350 hours

Rating of difficulty

hard