Skip to content

Commit 1a952d0

Browse files
committed
Use dynCall to notify on events from JavaScript to C#. (Removed webxr.c)
1 parent ddce6b4 commit 1a952d0

File tree

6 files changed

+32
-169
lines changed

6 files changed

+32
-169
lines changed

Packages/webxr/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased]
88
### Changed
9-
- How hands, controllers, hit-test and views data sent from JavaScript to C#.
9+
- How the interoperability between JavaScript and C# works.
1010

1111
## [0.11.0] - 2021-06-06
1212
### Added

Packages/webxr/Runtime/Plugins/WebGL/webxr.c

Lines changed: 0 additions & 69 deletions
This file was deleted.

Packages/webxr/Runtime/Plugins/WebGL/webxr.c.meta

Lines changed: 0 additions & 69 deletions
This file was deleted.

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@ mergeInto(LibraryManager.library, {
55
console.log(Module.WebXR.Settings);
66
},
77

8+
SetWebXREvents: function(onStartARPtr,
9+
onStartVRPtr, onVisibilityChangePtr, onEndXRPtr,
10+
onXRCapabilitiesPtr, onInputProfilesPtr) {
11+
Module.WebXR.onStartARPtr = onStartARPtr;
12+
Module.WebXR.onStartVRPtr = onStartVRPtr;
13+
Module.WebXR.onVisibilityChangePtr = onVisibilityChangePtr;
14+
Module.WebXR.onEndXRPtr = onEndXRPtr;
15+
Module.WebXR.onXRCapabilitiesPtr = onXRCapabilitiesPtr;
16+
Module.WebXR.onInputProfilesPtr = onInputProfilesPtr;
17+
},
18+
819
InitXRSharedArray: function(byteOffset) {
920
Module.XRSharedArrayOffset = byteOffset / 4;
1021
Module.WebXR.onUnityLoaded({detail: {state: 'Ready', module: Module}});

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

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -604,12 +604,7 @@ setTimeout(function () {
604604

605605
XRManager.prototype.UpdateXRCapabilities = function() {
606606
// Send browser capabilities to Unity.
607-
this.gameModule.WebXR.OnXRCapabilities(
608-
JSON.stringify({
609-
canPresentAR: this.isARSupported,
610-
canPresentVR: this.isVRSupported
611-
})
612-
);
607+
this.gameModule.WebXR.OnXRCapabilities(this.isARSupported, this.isVRSupported);
613608
}
614609

615610
// http://answers.unity.com/answers/11372/view.html
@@ -1064,47 +1059,41 @@ Module['WebXR'].GetJSEventsObject = function () {
10641059

10651060
Module['WebXR'].OnStartAR = function (views_count, left_rect, right_rect) {
10661061
Module.WebXR.isInXR = true;
1067-
this.OnStartARInternal = this.OnStartARInternal || Module.cwrap("on_start_ar", null, ["number",
1068-
"number", "number", "number", "number",
1069-
"number", "number", "number", "number"]);
1070-
this.OnStartARInternal(views_count,
1062+
Module.dynCall_viffffffff(Module.WebXR.onStartARPtr, views_count,
10711063
left_rect.x, left_rect.y, left_rect.w, left_rect.h,
10721064
right_rect.x, right_rect.y, right_rect.w, right_rect.h);
10731065
}
10741066

10751067
Module['WebXR'].OnStartVR = function (views_count, left_rect, right_rect) {
10761068
Module.WebXR.isInXR = true;
1077-
this.OnStartVRInternal = this.OnStartVRInternal || Module.cwrap("on_start_vr", null, ["number",
1078-
"number", "number", "number", "number",
1079-
"number", "number", "number", "number"]);
1080-
this.OnStartVRInternal(views_count,
1069+
Module.dynCall_viffffffff(Module.WebXR.onStartVRPtr, views_count,
10811070
left_rect.x, left_rect.y, left_rect.w, left_rect.h,
10821071
right_rect.x, right_rect.y, right_rect.w, right_rect.h);
10831072
}
10841073

10851074
Module['WebXR'].OnVisibilityChange = function (visibility_state) {
1086-
this.OnVisibilityChangeInternal = this.OnVisibilityChangeInternal || Module.cwrap("on_visibility_change", null, ["number"]);
10871075
var visibility_state_int = 0;
10881076
if (visibility_state == "visible-blurred") {
10891077
visibility_state_int = 1;
10901078
} else if (visibility_state == "hidden") {
10911079
visibility_state_int = 2;
10921080
}
1093-
this.OnVisibilityChangeInternal(visibility_state_int);
1081+
Module.dynCall_vi(Module.WebXR.onVisibilityChangePtr, visibility_state_int);
10941082
}
10951083

10961084
Module['WebXR'].OnEndXR = function () {
10971085
Module.WebXR.isInXR = false;
1098-
this.OnEndXRInternal = this.OnEndXRInternal || Module.cwrap("on_end_xr", null, []);
1099-
this.OnEndXRInternal();
1086+
Module.dynCall_v(Module.WebXR.onEndXRPtr);
11001087
}
11011088

1102-
Module['WebXR'].OnXRCapabilities = function (display_capabilities) {
1103-
this.OnXRCapabilitiesInternal = this.OnXRCapabilitiesInternal || Module.cwrap("on_xr_capabilities", null, ["string"]);
1104-
this.OnXRCapabilitiesInternal(display_capabilities);
1089+
Module['WebXR'].OnXRCapabilities = function (isARSupported, isVRSupported) {
1090+
Module.dynCall_vii(Module.WebXR.onXRCapabilitiesPtr, isARSupported, isVRSupported);
11051091
}
11061092

11071093
Module['WebXR'].OnInputProfiles = function (input_profiles) {
1108-
this.OnInputProfilesInternal = this.OnInputProfilesInternal || Module.cwrap("on_input_profiles", null, ["string"]);
1109-
this.OnInputProfilesInternal(input_profiles);
1094+
var strBufferSize = lengthBytesUTF8(input_profiles) + 1;
1095+
var strBuffer = Module._malloc(strBufferSize);
1096+
stringToUTF8(input_profiles, strBuffer, strBufferSize);
1097+
Module.dynCall_vi(Module.WebXR.onInputProfilesPtr, strBuffer);
1098+
Module._free(strBuffer);
11101099
}

Packages/webxr/Runtime/XRPlugin/WebXRSubsystem.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ private void UpdateXRCameras()
169169
private void InternalStart()
170170
{
171171
#if UNITY_WEBGL
172-
Native.set_webxr_events(OnStartAR, OnStartVR, UpdateVisibilityState, OnEndXR, OnXRCapabilities, OnInputProfiles);
172+
Native.SetWebXREvents(OnStartAR, OnStartVR, UpdateVisibilityState, OnEndXR, OnXRCapabilities, OnInputProfiles);
173173
Native.InitControllersArray(controllersArray);
174174
Native.InitHandsArray(handsArray);
175175
Native.InitViewerHitTestPoseArray(viewerHitTestPoseArray);
@@ -205,11 +205,11 @@ private static class Native
205205
public static extern void ControllerPulse(int controller, float intensity, float duration);
206206

207207
[DllImport("__Internal")]
208-
public static extern void set_webxr_events(Action<int, float, float, float, float, float, float, float, float> on_start_ar,
208+
public static extern void SetWebXREvents(Action<int, float, float, float, float, float, float, float, float> on_start_ar,
209209
Action<int, float, float, float, float, float, float, float, float> on_start_vr,
210210
Action<int> on_visibility_change,
211211
Action on_end_xr,
212-
Action<string> on_xr_capabilities,
212+
Action<bool, bool> on_xr_capabilities,
213213
Action<string> on_input_profiles);
214214
}
215215
#endif
@@ -292,11 +292,12 @@ public delegate void HeadsetUpdate(
292292
internal WebXRDisplayCapabilities capabilities = new WebXRDisplayCapabilities();
293293

294294
// Handles WebXR capabilities from browser
295-
[MonoPInvokeCallback(typeof(Action<string>))]
296-
public static void OnXRCapabilities(string json)
295+
[MonoPInvokeCallback(typeof(Action<bool, bool>))]
296+
public static void OnXRCapabilities(bool isARSupported, bool isVRSupported)
297297
{
298-
WebXRDisplayCapabilities capabilities = JsonUtility.FromJson<WebXRDisplayCapabilities>(json);
299-
Instance.OnXRCapabilities(capabilities);
298+
Instance.capabilities.canPresentAR = isARSupported;
299+
Instance.capabilities.canPresentVR = isVRSupported;
300+
Instance.OnXRCapabilities(Instance.capabilities);
300301
}
301302

302303
[MonoPInvokeCallback(typeof(Action<string>))]

0 commit comments

Comments
 (0)