Skip to content

Commit fcb1759

Browse files
committed
Updated InterfaceCallbacks - these appear to fix the crash.
1 parent cdecc49 commit fcb1759

2 files changed

Lines changed: 30 additions & 8 deletions

File tree

OSVR-Unity/Assets/OSVRUnity/src/InterfaceCallbacks.cs

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,16 @@ public void RegisterCallback(PoseMatrixCallback callback)
5353
if (null == poseMatrixCallbacks)
5454
{
5555
poseMatrixCallbacks = callback;
56-
iface.registerCallback(PoseMatrixCb, System.IntPtr.Zero);
56+
rawPoseMatrixCallback = new OSVR.ClientKit.PoseCallback(PoseMatrixCb);
57+
iface.registerCallback(rawPoseMatrixCallback, System.IntPtr.Zero);
5758
}
5859
else
5960
{
6061
poseMatrixCallbacks += callback;
6162
}
6263
}
6364

65+
private OSVR.ClientKit.PoseCallback rawPoseMatrixCallback;
6466
private PoseMatrixCallback poseMatrixCallbacks;
6567

6668
public void RegisterCallback(PoseCallback callback)
@@ -69,14 +71,16 @@ public void RegisterCallback(PoseCallback callback)
6971
if (null == poseCallbacks)
7072
{
7173
poseCallbacks = callback;
72-
iface.registerCallback(PoseCb, System.IntPtr.Zero);
74+
rawPoseCallback = new OSVR.ClientKit.PoseCallback(PoseCb);
75+
iface.registerCallback(rawPoseCallback, System.IntPtr.Zero);
7376
}
7477
else
7578
{
7679
poseCallbacks += callback;
7780
}
7881
}
7982

83+
private OSVR.ClientKit.PoseCallback rawPoseCallback;
8084
private PoseCallback poseCallbacks;
8185

8286
public void RegisterCallback(PositionCallback callback)
@@ -85,14 +89,16 @@ public void RegisterCallback(PositionCallback callback)
8589
if (null == positionCallbacks)
8690
{
8791
positionCallbacks = callback;
88-
iface.registerCallback(PositionCb, System.IntPtr.Zero);
92+
rawPositionCallback = new OSVR.ClientKit.PositionCallback(PositionCb);
93+
iface.registerCallback(rawPositionCallback, System.IntPtr.Zero);
8994
}
9095
else
9196
{
9297
positionCallbacks += callback;
9398
}
9499
}
95100

101+
private OSVR.ClientKit.PositionCallback rawPositionCallback;
96102
private PositionCallback positionCallbacks;
97103

98104
public void RegisterCallback(OrientationCallback callback)
@@ -101,26 +107,34 @@ public void RegisterCallback(OrientationCallback callback)
101107
if (null == orientationCallbacks)
102108
{
103109
orientationCallbacks = callback;
104-
iface.registerCallback(OrientationCb, System.IntPtr.Zero);
110+
rawOrientationCallback = new OSVR.ClientKit.OrientationCallback(OrientationCb);
111+
iface.registerCallback(rawOrientationCallback, System.IntPtr.Zero);
105112
}
106113
else
107114
{
108115
orientationCallbacks += callback;
109116
}
110117
}
111118

119+
private OSVR.ClientKit.OrientationCallback rawOrientationCallback;
112120
private OrientationCallback orientationCallbacks;
113121

114122
public void RegisterCallback(ButtonCallback callback)
115123
{
116124
Start(); // make sure the interface is initialized.
117125
if (null == buttonCallbacks)
118126
{
119-
iface.registerCallback(ButtonCb, System.IntPtr.Zero);
127+
buttonCallbacks = callback;
128+
rawButtonCallback = new OSVR.ClientKit.ButtonCallback(ButtonCb);
129+
iface.registerCallback(rawButtonCallback, System.IntPtr.Zero);
130+
}
131+
else
132+
{
133+
buttonCallbacks += callback;
120134
}
121-
buttonCallbacks += callback;
122135
}
123136

137+
private OSVR.ClientKit.ButtonCallback rawButtonCallback;
124138
private ButtonCallback buttonCallbacks;
125139

126140
public void RegisterCallback(AnalogCallback callback)
@@ -129,18 +143,22 @@ public void RegisterCallback(AnalogCallback callback)
129143
if (null == analogCallbacks)
130144
{
131145
analogCallbacks = callback;
132-
iface.registerCallback(AnalogCb, System.IntPtr.Zero);
146+
rawAnalogCallback = new OSVR.ClientKit.AnalogCallback(AnalogCb);
147+
iface.registerCallback(rawAnalogCallback, System.IntPtr.Zero);
133148
}
134149
else
135150
{
136151
analogCallbacks += callback;
137152
}
138153
}
139154

155+
private OSVR.ClientKit.AnalogCallback rawAnalogCallback;
140156
private AnalogCallback analogCallbacks;
141157

142158
/* END GENERATED CODE - unity-generate.lua */
143159

160+
161+
144162
private void PoseCb(System.IntPtr userdata, ref OSVR.ClientKit.TimeValue timestamp, ref OSVR.ClientKit.PoseReport report)
145163
{
146164
Vector3 position = Math.ConvertPosition(report.pose.translation);

unity-generate.lua

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ template = [[
44
Start(); // make sure the interface is initialized.
55
if (null == $WrappedList) {
66
$WrappedList = callback;
7-
iface.registerCallback ($RawCallback, System.IntPtr.Zero);
7+
raw$WrappedCallback = new OSVR.ClientKit.$RawCallbackType($RawCallback);
8+
iface.registerCallback (raw$WrappedCallback, System.IntPtr.Zero);
89
} else {
910
$WrappedList += callback;
1011
}
1112
}
1213
14+
private OSVR.ClientKit.$RawCallbackType raw$WrappedCallback;
1315
private $WrappedCallback $WrappedList;
1416
]]
1517
function generate(data)
@@ -24,6 +26,7 @@ print(generate{
2426
WrappedCallback = "PoseMatrixCallback";
2527
WrappedList = "poseMatrixCallbacks";
2628
RawCallback = "PoseMatrixCb";
29+
RawCallbackType = "PoseCallback";
2730
})
2831

2932
for _, v in ipairs{"Pose", "Position", "Orientation", "Button", "Analog"} do
@@ -33,6 +36,7 @@ for _, v in ipairs{"Pose", "Position", "Orientation", "Button", "Analog"} do
3336
WrappedCallback = CapsName .. "Callback";
3437
WrappedList = nocapsName .. "Callbacks";
3538
RawCallback = CapsName .. "Cb";
39+
RawCallbackType = CapsName .. "Callback";
3640
}
3741
print(generate(vals))
3842
end

0 commit comments

Comments
 (0)