FYI - there's a presentation about Incremental UI's at https://www.youtube.com/watch?v=LkSWyqNUBq8
Really speaks to me since I've been doing a lot of React at my dayjob, and ended up with an approach I really like for splitting between App state (FRP) and UI State (React class components) and DOM View (React functional components) - but it totally feels like there's something better lurking there...
In terms of Raw WebGL - that's been my nighttime / side project for a bit of a while now and my excuse for not getting into any of the language learning I want to do (still on the fence about whether it'll be Rust or Purescript/Haskell.... kinda leaning towards purescript actually because so many of the things I want to do require understanding Haskell, but I'm building for the web, and Purescript looks more appealing than GHCJS)
Anyway - about that WebGL thing, I've made significant progress to build a renderer but it's not done yet. Conceptually though it's working and it's supporting most of the GLTF Spec so far... you can see it in action at https://dakom.github.io/pure3d/#/gltf/DAMAGED_HELMET_BINARY
The implementation idea is pretty much something like:
1. Load all the required data
2. Create a memoized function that has all the IO needs cached - return a
render() function for side effects.
render() expects a
Scene which is pure data, completely based on simple primitives (actually it's mostly
number and arrays - I think there's only one
string in there). Given that it's pure data, it could even be serialized.
4. create a function
createScene() that can generate a new
Scene, based on the loaded data.
createScene() and pass that result into a FRP pipeline (could even be in a separate thread)
1. Pipeline may creates new immutable copies of
Scene, and it doesn't matter how it modifies it (e.g. even deleting nodes is completely fine) - the only catch is that certain properties of the scene should have the same value as they were when it was originally created (e.g. lookupIds)
2. At the end of the pipeline, pass the resulting
It's far enough along that I can probably put together a demo with Sodium - maybe a 3D bouncing ball Will try to do that in the coming week