Thanks! The approach is actually much less sophisticated than you might expect ![]()
The multiview rendering itself is fairly brute-force at the moment — there’s no single-pass multiview rendering or lower-level draw-call optimization. For each frame, I update the scene once, then render the same Processing P3D scene once for every view (48 times on the Portrait), using a laterally shifted camera and asymmetric frustum for each one. Those views are then tiled into the quilt.
The part I don’t handle myself is the final optical transformation. Once the quilt is ready, I pass its OpenGL texture directly to Looking Glass Bridge through its native API. Looking Glass Bridge takes the quilt and performs the device-specific optical/interlacing pass for the actual display. That’s why you don’t see a custom light-field shader in my code.
The C++ part is mostly a small JNI/OpenGL interoperability layer for talking to Looking Glass Bridge and sharing the quilt texture directly, so there’s no CPU readback/upload in the normal rendering loop.
So performance is still very dependent on scene complexity, because the scene really is drawn once per view. I haven’t done a proper benchmark across different hardware yet, so I’d rather not give a fixed FPS number, but the simpler examples are already quite usable interactively on the Portrait.
I’d definitely be interested in exploring better multiview rendering optimizations in the future!