Traditionally it’s been hard or downright impossible to have C on a GPU: Graphics Shaders are mainly done in GLSL/HLSL (C-like languages) and Compute Shaders only recently run it via CUDA/LLVM complex toolchains. This is not always desirable or available - mobile phones for ex. Turns out code can compile both as valid C and shader language with a bit of library writing effort. All you mostly need is equivalent 2D/3D/4D vector and matrix types.
What’s the catch then? Swizzling! The shader vector allows addressing of its components both as , ,  etc but also as .x, .y, .xyz, .zyx, .xxx and all possible combinations. The talk details how this can be achieved in modern C++, clean and in a generic way, without preprocessor tricks, and overcome language obstacles like template argument deduction with implicit conversions. After all the effort it’s possible to prototype complex procedural effects at an interactive rate with full CPU-side debugging. Of course, a dedicated GPU will very quickly outpace this but loses the debugging, and some devices might not always produce correct results due to driver bugs.
As takeaway and showcase of what can be achieved with the C++ techniques presented I’ll introduce Signed Distance Field functions modeling and some shaders that use it: Procedural Generated Planet, Volumetric Clouds simulation and some fun experiments: a Vinyl Turntable and an Egg On Bicycle!
YOU MAY ALSO LIKE:
- Splash Damage (SkillsCast recorded in March 2019)
- Lightbend Akka for Scala - Professional (in London on 11th - 12th November 2019)
- Advanced Scala with Dick Wall (in London on 9th - 11th December 2019)
- F# eXchange 2020 (in London on 2nd - 3rd April 2020)
- Solandra Hands-On Tutorial & Emergent Behaviour In Insects (in London on 28th October 2019)
- Keynote by Ruben Bridgewater on Performance Optimisations and the Possible Savings Doing So (in London on 30th October 2019)
- Designing embodied human-computer interactions with audio processing parameters (SkillsCast recorded in October 2019)
- Why We Choose React for a Large Scale Financial Trading Platform (SkillsCast recorded in October 2019)
Rapid Prototyping of Graphics Shaders in Modern C++
Valentin is a professional video game developer based in London, UK. He currently works at Splash Damage for the award-winning "Gears of War" franchise on Windows 10 and Xbox One. C++ enthusiast and evangelist, focused on systems, graphics and engine programming. He has 10 years worth of experience, with past work ranging from MMO projects to mobile and handheld games. When he's not geeking out on games, he collects vinyl records.