Renderers

The rendering subsystems were completely rewritten for CatDV 14.

Previously, we had Direct3D9 for Windows and OpenGL 2.1 functionality for macOS. Those two modules were completely disconnected and were very much platform dependent with no abstraction above them.

We made the new renderers so that there's an abstraction above what we think of as "mini drivers". The players' video output modules use a common interface to fulfill all their rendering needs and the commands and geometry batches are submitted to the mini drivers.

We made an OpenGL 3.3 mini driver that can be used on macOS, Windows and Linux (if we ever required a renderer for this platform) and a macOS only Metal renderer.

The whole system no longer uses a fixed pipeline as before and now fully embraces a programmable pipeline using shaders: GLSL for OpenGL and Metal Shader Language for Metal. A great usage of shaders was when we introduced real-time LUT application support, where the user can see the LUT being applied as the movie plays, something we achieved pretty easily with the flexibility of the new rendering subsystem using 3D textures and shaders.

One problem we've encountered since unveiling the new rendering subsystem is customers who are using very old hardware. Incredibly, their hardware is so old that OpenGL 3.3 (from 2010, which we settled on the standard to use) doesn't work with their machines.

We were able to use the old D3D9 pipeline for backwards compatility and to utilise the OpenGL "mini-driver" for macOS when Metal is not available (the only time we'd now use OpenGL on macOS).