Skip to content

Commit a4f5cdb

Browse files
committed
Changed the way hit-test data is sent from JS to C#
1 parent 56f492f commit a4f5cdb

File tree

3 files changed

+18
-39
lines changed

3 files changed

+18
-39
lines changed

Packages/webxr/Runtime/Plugins/WebGL/webxr.jslib

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@ mergeInto(LibraryManager.library, {
2020
Module.HandsArrayOffset = byteOffset / 4;
2121
},
2222

23-
InitViewerHitTestPoseArray: function(byteOffset, length) {
24-
Module.ViewerHitTestPoseArrayOffset = byteOffset;
25-
Module.ViewerHitTestPoseArrayLength= length;
26-
Module.ViewerHitTestPoseArray = new Float32Array(buffer, byteOffset, length);
23+
InitViewerHitTestPoseArray: function(byteOffset) {
24+
Module.ViewerHitTestPoseArrayOffset = byteOffset / 4;
2725
},
2826

2927
ToggleAR: function() {

Packages/webxr/Runtime/Plugins/WebGL/webxr.jspre

Lines changed: 14 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,7 @@ setTimeout(function () {
9191
}
9292

9393
function XRHitPoseData() {
94-
this.frame = 0;
95-
this.available = 0;
96-
this.position = [0, 0, 0];
97-
this.rotation = [0, 0, 0, 1];
94+
this.bufferIndex = 0;
9895
}
9996

10097
function lerp(start, end, percentage)
@@ -764,12 +761,15 @@ setTimeout(function () {
764761
this.xrData.controllerB.bufferIndex = Module.ControllersArrayOffset + 28;
765762
this.xrData.handLeft.bufferIndex = Module.HandsArrayOffset;
766763
this.xrData.handRight.bufferIndex = Module.HandsArrayOffset + 205;
764+
this.xrData.viewerHitTestPose.bufferIndex = Module.ViewerHitTestPoseArrayOffset;
767765
this.xrData.controllerA.updatedProfiles = 0;
768766
this.xrData.controllerB.updatedProfiles = 0;
769767
this.xrData.controllerA.profiles = [];
770768
this.xrData.controllerB.profiles = [];
771769
Module.HEAPF32[this.xrData.controllerA.bufferIndex + 20] = 0; // XRControllerData.updatedGrip
772770
Module.HEAPF32[this.xrData.controllerB.bufferIndex + 20] = 0; // XRControllerData.updatedGrip
771+
Module.HEAPF32[this.xrData.viewerHitTestPose.bufferIndex] = -1; // XRHitPoseData.frame
772+
Module.HEAPF32[this.xrData.viewerHitTestPose.bufferIndex + 1] = 0; // XRHitPoseData.available
773773
}
774774
var thisXRMananger = this;
775775
session.requestReferenceSpace(refSpaceType).then(function (refSpace) {
@@ -852,25 +852,22 @@ setTimeout(function () {
852852
this.getXRControllersData(frame, session.inputSources, session.refSpace, xrData);
853853

854854
if (session.isAR && this.viewerHitTestSource) {
855-
xrData.viewerHitTestPose.frame = xrData.frameNumber;
855+
Module.HEAPF32[xrData.viewerHitTestPose.bufferIndex] = xrData.frameNumber; // XRHitPoseData.frame
856856
var viewerHitTestResults = frame.getHitTestResults(this.viewerHitTestSource);
857857
if (viewerHitTestResults.length > 0) {
858858
var hitTestPose = viewerHitTestResults[0].getPose(session.localRefSpace);
859-
xrData.viewerHitTestPose.available = 1;
860-
xrData.viewerHitTestPose.position[0] = hitTestPose.transform.position.x;
859+
Module.HEAPF32[xrData.viewerHitTestPose.bufferIndex + 1] = 1; // XRHitPoseData.available
860+
Module.HEAPF32[xrData.viewerHitTestPose.bufferIndex + 2] = hitTestPose.transform.position.x; // XRHitPoseData.position[0]
861861
var hitTestPoseBase = viewerHitTestResults[0].getPose(session.refSpace); // Ugly hack for y position on Samsung Internet
862-
xrData.viewerHitTestPose.position[1] = hitTestPose.transform.position.y + Math.abs(hitTestPose.transform.position.y - hitTestPoseBase.transform.position.y);
863-
xrData.viewerHitTestPose.position[2] = -hitTestPose.transform.position.z;
864-
xrData.viewerHitTestPose.rotation[0] = -hitTestPose.transform.orientation.x;
865-
xrData.viewerHitTestPose.rotation[1] = -hitTestPose.transform.orientation.y;
866-
xrData.viewerHitTestPose.rotation[2] = hitTestPose.transform.orientation.z;
867-
xrData.viewerHitTestPose.rotation[3] = hitTestPose.transform.orientation.w;
862+
Module.HEAPF32[xrData.viewerHitTestPose.bufferIndex + 3] = hitTestPose.transform.position.y + Math.abs(hitTestPose.transform.position.y - hitTestPoseBase.transform.position.y); // XRHitPoseData.position[1]
863+
Module.HEAPF32[xrData.viewerHitTestPose.bufferIndex + 4] = -hitTestPose.transform.position.z; // XRHitPoseData.position[2]
864+
Module.HEAPF32[xrData.viewerHitTestPose.bufferIndex + 5] = -hitTestPose.transform.orientation.x; // XRHitPoseData.rotation[0]
865+
Module.HEAPF32[xrData.viewerHitTestPose.bufferIndex + 6] = -hitTestPose.transform.orientation.y; // XRHitPoseData.rotation[1]
866+
Module.HEAPF32[xrData.viewerHitTestPose.bufferIndex + 7] = hitTestPose.transform.orientation.z; // XRHitPoseData.rotation[2]
867+
Module.HEAPF32[xrData.viewerHitTestPose.bufferIndex + 8] = hitTestPose.transform.orientation.w; // XRHitPoseData.rotation[3]
868868
} else {
869-
xrData.viewerHitTestPose.available = 0;
869+
Module.HEAPF32[xrData.viewerHitTestPose.bufferIndex + 1] = 0; // XRHitPoseData.available
870870
}
871-
this.updateUnityXRViewerHitTestPose({
872-
viewerHitTestPose: xrData.viewerHitTestPose
873-
});
874871
}
875872

876873
if (xrData.controllerA.updatedProfiles == 1 || xrData.controllerB.updatedProfiles == 1)
@@ -961,22 +958,6 @@ setTimeout(function () {
961958
});
962959
}
963960

964-
XRManager.prototype.updateUnityXRViewerHitTestPose = function (data) {
965-
var index = 0;
966-
if (Module.ViewerHitTestPoseArray.byteLength == 0) {
967-
Module.ViewerHitTestPoseArray = new Float32Array(buffer, Module.ViewerHitTestPoseArrayOffset, Module.ViewerHitTestPoseArrayLength);
968-
}
969-
Module.ViewerHitTestPoseArray[index++] = data.viewerHitTestPose.frame;
970-
Module.ViewerHitTestPoseArray[index++] = data.viewerHitTestPose.available;
971-
Module.ViewerHitTestPoseArray[index++] = data.viewerHitTestPose.position[0];
972-
Module.ViewerHitTestPoseArray[index++] = data.viewerHitTestPose.position[1];
973-
Module.ViewerHitTestPoseArray[index++] = data.viewerHitTestPose.position[2];
974-
Module.ViewerHitTestPoseArray[index++] = data.viewerHitTestPose.rotation[0];
975-
Module.ViewerHitTestPoseArray[index++] = data.viewerHitTestPose.rotation[1];
976-
Module.ViewerHitTestPoseArray[index++] = data.viewerHitTestPose.rotation[2];
977-
Module.ViewerHitTestPoseArray[index++] = data.viewerHitTestPose.rotation[3];
978-
}
979-
980961
function initWebXRManager () {
981962
var xrManager = window.xrManager = new XRManager();
982963
return xrManager;

Packages/webxr/Runtime/XRPlugin/WebXRSubsystem.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ private void InternalStart()
172172
Native.set_webxr_events(OnStartAR, OnStartVR, UpdateVisibilityState, OnEndXR, OnXRCapabilities, OnInputProfiles);
173173
Native.InitControllersArray(controllersArray);
174174
Native.InitHandsArray(handsArray);
175-
Native.InitViewerHitTestPoseArray(viewerHitTestPoseArray, viewerHitTestPoseArray.Length);
175+
Native.InitViewerHitTestPoseArray(viewerHitTestPoseArray);
176176
Native.InitXRSharedArray(sharedArray, sharedArray.Length);
177177
#endif
178178
}
@@ -190,7 +190,7 @@ private static class Native
190190
public static extern void InitHandsArray(float[] array);
191191

192192
[DllImport("__Internal")]
193-
public static extern void InitViewerHitTestPoseArray(float[] array, int length);
193+
public static extern void InitViewerHitTestPoseArray(float[] array);
194194

195195
[DllImport("__Internal")]
196196
public static extern void ToggleAR();

0 commit comments

Comments
 (0)