docs: public void applyPose(GVRPose newpose, int poseSpace)
      {
          int numbones = getNumBones();
  
          /*
           * Apply input pose that is relative to the bind pose.
           * Multiply the input rotations by the bind pose
           * rotations to get rotations relative to the
           * skeleton root.
           */
          if (poseSpace == BIND_POSE_RELATIVE)
          {
              for (int i = 0; i < numbones; ++i)
              {
                  GVRPose.Bone srcBone = newpose.getBone(i);
  
                  if ((srcBone.Changed != 0) && !isLocked(i))
                  {
                      mBindPose.getLocalMatrix(i, mTempMtx);
                      mTempMtx.mul(srcBone.LocalMatrix);
                      mTempMtx.getUnnormalizedRotation(mTempQuatA);
                      mPose.setLocalRotation(i, mTempQuatA.x, mTempQuatA.y, mTempQuatA.z, mTempQuatA.w);
                      srcBone.Changed = 0;
                  }
              }
          }
          /*
           * Apply input pose that contains only local rotations.
           */
          else if (poseSpace == ROTATION_ONLY)
          {
              for (int i = 0; i < numbones; ++i)
              {
                  GVRPose.Bone srcBone = newpose.getBone(i);
  
                  if ((srcBone.Changed != 0) && !isLocked(i))
                  {
                      newpose.getLocalRotation(i, mTempQuatA);
                      mPose.setLocalRotation(i, mTempQuatA.x, mTempQuatA.y, mTempQuatA.z, mTempQuatA.w);
                      srcBone.Changed = 0;
                  }
              }
          }
          /*
           * Apply the world rotations from the input pose to
           * the skeleton's current pose. The rotations are
           * already relative to the skeleton root.
           */
          else
          {
              newpose.sync();
              if (mPose != newpose)
              {
                  for (int i = 0; i < numbones; ++i)
                  {
                      if (!isLocked(i))
                      {
                          GVRPose.Bone srcBone = newpose.getBone(i);
                          srcBone.getLocalMatrix(mTempMtx);
                          mPose.setLocalMatrix(i, mTempMtx);
                      }
                  }
              }
          }
          mPose.sync();
          updateBonePose();
      }