inline void UpdateNodeWorldMatrix( Node &node, int nodeDirtyFlags, BufferIndex updateBufferIndex ) { // If world-matrix needs to be recalculated if ( nodeDirtyFlags & TransformFlag ) { if( node.GetInhibitLocalTransform() ) { node.SetWorldMatrix( updateBufferIndex, node.GetWorldScale(updateBufferIndex), node.GetWorldRotation(updateBufferIndex) / node.GetRotation(updateBufferIndex), node.GetWorldPosition(updateBufferIndex) - node.GetPosition(updateBufferIndex) ); } else { node.SetWorldMatrix( updateBufferIndex, node.GetWorldScale(updateBufferIndex), node.GetWorldRotation(updateBufferIndex), node.GetWorldPosition(updateBufferIndex) ); } } else { node.CopyPreviousWorldMatrix( updateBufferIndex ); } }
inline void UpdateNodeWorldMatrix( Node& node, RenderableAttachment& updatedRenderable, int nodeDirtyFlags, BufferIndex updateBufferIndex ) { /** * If world-matrix needs to be recalculated. */ if ( ( nodeDirtyFlags & TransformFlag ) || updatedRenderable.IsScaleForSizeDirty() ) { if( updatedRenderable.UsesGeometryScaling() ) { // scaling, i.e. Text or Mesh Vector3 scaling; updatedRenderable.GetScaleForSize( node.GetSize( updateBufferIndex ), scaling ); if( node.GetInhibitLocalTransform() ) { node.SetWorldMatrix( updateBufferIndex, node.GetWorldScale(updateBufferIndex) * scaling, node.GetWorldRotation(updateBufferIndex) / node.GetRotation(updateBufferIndex), node.GetWorldPosition(updateBufferIndex) - node.GetPosition(updateBufferIndex) ); } else { node.SetWorldMatrix( updateBufferIndex, node.GetWorldScale(updateBufferIndex) * scaling, node.GetWorldRotation(updateBufferIndex), node.GetWorldPosition(updateBufferIndex) ); } } else { // no scaling, i.e. Image if( node.GetInhibitLocalTransform() ) { node.SetWorldMatrix( updateBufferIndex, node.GetWorldScale(updateBufferIndex), node.GetWorldRotation(updateBufferIndex) / node.GetRotation(updateBufferIndex), node.GetWorldPosition(updateBufferIndex) - node.GetPosition(updateBufferIndex) ); } else { node.SetWorldMatrix( updateBufferIndex, node.GetWorldScale(updateBufferIndex), node.GetWorldRotation(updateBufferIndex), node.GetWorldPosition(updateBufferIndex) ); } } } else { node.CopyPreviousWorldMatrix( updateBufferIndex ); } }