StatefulObjects
In the engine we have the concept of state updates for some objects that represent both jme logical objects and opengl native objects. This pr extends this approach by introducing a way to store custom states for objects that extend the StatefulObjects class.
This can be used to implement self contained renderers as modules that don't need any change in the core to work nor to maintain large maps to point jme objects to their local representation.
This also allows multiple contexts to be updated and invalidated separately without them being aware of each other and without polling for changes.
As an example let's say we have a Mesh that is needed by the rendering engine and the physics engine:
- both engines append a state to the mesh (eg. GLMeshState and BulletBodyState )
- after some time the mesh is changed (eg. the vertices change position)
- both the states are invalidated
- the GLMeshState will notify the renderer to submit the new vertices to the gpu, at the same time BulletBodyState will notify the physics engine to update the rigidbody associated to this mesh
- the two states can update out of order and asynchronously
This pr implements StatefulObjects for some objects that have a representation in our current rendering backend:
- All the native objects
- Spatial and Node : for model -> world transform matrix
- Camera : for view/projection matrices
Obviously there is nothing that can benefit from this PR atm, but it will allow future development to be less reliant on the core module.