Before this fix, a script could call into HMD.getHUDLookAtPosition2D() while the app was shutting down, which in turn would call
getHeadPose() on the currently active display plugin. This call could cause a crash within the openvr plugin, because the SDK was either shutdown, or in the process of shutting down on the main thread.
This fixes this by spliting the previous DisplayPlugin::getHeadPose(int) into two parts:
* updateHeadPose(int) which is only called once a frame and only by the main thread.
* getHeadPose() which is thread-safe and will return a cached copy of the hmd pose sampled by the last updateHeadPose.
There were three things that were causing issues with eye look at vectors while wearing an HMD.
1) The matrix returned by AvatarUpdate->getHeadPose() was in the wrong space, it should be in avatar space.
it was actually returning a matrix in sensor/room space.
2) The lookAtPosition was incorrect while wearing an HMD and with no avatars to look at.
3) The eye rotation limits in Rig::updateEyeJoint were relative to the model's zero orientation, NOT relative to the head.
this was causing the eyes to hit limits when the avatar head turned.
GenericThread used to accept an optional "parent" argument, defaulting to nullptr.
This was odd, because the moveToThread() in GenericThread::initialize() would
become a no-op if the instance ever inits QObject(someNonNullParentQObject).
(The only clue would be a log message "QObject::moveToThread: Cannot move objects with a parent",
and things would end up in the same thread that created the instance.)
As it turns out, all the subclasses of GenericThread do not init
GenericThread(parent), so things worked as expected.