General
- Selection of Open Source License
- Project websites
- Community mailing list/forum
- Social media
- Testing frameworks/approach/projects - SceneGraphTestBed
- Build tools
Vulkan
- Setup and Configuration
- State and geometry data
- Creation of buffers
- Uniforms
- Textures
- Arrays
- Primitives
- Shaders
- tools for offline and runtime .glsl -> SPIR-V
- runtime shader compilation options
- Presentation of graphics
- Threading
- Synchronization
C++
- Features and availability of C++ 11, 14 and 17
- Threading
- Containers
- Algorithms
- Memory management
- Templates
- Lambda
- Style Guide
Core class
- Memory
- ref_ptr
- Object
- Backbone data - local data used during standard traversals/operations
- Extra - data used rarely : parents, observers, user data
- Introspection
- Wrappers
- Serialization
- I/O
- Threading
- C++ now has threading but no Affinity
- Thread pools
Scene Graph
- Scope out the minimal set of Node classes required
- NullNode to avoid the need for if (!node) doSomething
- Fixed size vs variable size Containers in Groups etc.
- Level of Detail
- CullNode (shift bounding volumes from all nodes to specialized node?)
- MaskNode (shift node mask checks from all nodes to specialized node?)
- Cameras
- Traversal
- Visitor Pattern
- Possibilities for inlining vs virtual functions
- RenderTraversal
- ComputeTraversal
- UpdateTraversal
- EventTraversal
- Multi-pass and Multi-stage rendering control
- State
- Buffers
- Uniforms
- Textures
- Arrays
- Primitives
- Shaders
- Shader composition
- Threading
- Traversals
- Database paging
Viewer
- Window creation
- Vulkan initialization and synchronization
- Presentation of graphics, swap management
- Threading
- Single view vs multi view
Interoperability
- Converting scene graph data from OpenSceneGraph data to VSG leverages loaders
- Rendering Vulkan graphics within an OpenGL graphics context