Thank you, so far it has been pretty straightforward to map and I am liking that just about everything stems from ccl::Node with sockets which simplifies a lot of the integration, and everything else which are purely just param structs, I am treating as global strings to match Gaffer’s convention eg. “ccl:session:shadingsystem” will map accordingly to the right struct/object.
I guess the one thing that is a little difficult to grasp is how to do instancing. I was going to make an instancing cache much like the other backends of Gaffer which will store a collection of unique ccl::Objects but their ccl::Mesh pointer will point to the mesh that is meant to be instanced, with a check to see if it is being micropolygon-diced and making sure it will be unique and not instanced in this scenario. Is that the correct convention, or do I use the particle system somehow?
The blender sync and stand-alone code is extremely helpful though which has guided me for the most part. I’ll ask some more, probably when I get to how to implement AOVs or “passes” and the shading system properly beyond OSL, which Gaffer can manage for the most part itself and just offload the resulting .oso to Cycles (I’m imagining here).