Skip to content

Commit 98d5499

Browse files
committed
Fix hit-test samples for compatibility with SharpEngine v3.2.9386
As of SharpEngine v3.2.9386, a camera instance cannot be re-used in a different scene view anymore. Some of the hit test samples (Rectangular selection sample, Hit testing with ID bitmap sample) need to be updated to accommodate this change; i.e., create new instance of `TargetPositionCamera` and sync its properties on each ID bitmap render pass.
1 parent 382633e commit 98d5499

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

Ab4d.SharpEngine.Samples.Common/HitTesting/HitTestingWithIdBitmapSample.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Diagnostics;
22
using System.Numerics;
3+
using Ab4d.SharpEngine.Cameras;
34
using Ab4d.SharpEngine.Common;
45
using Ab4d.SharpEngine.Materials;
56
using Ab4d.SharpEngine.SceneNodes;
@@ -64,6 +65,7 @@ public class HitTestingWithIdBitmapSample : CommonSample
6465
private Stopwatch _renderStopwatch = new Stopwatch();
6566

6667
private SceneView? _bitmapIdSceneView;
68+
private TargetPositionCamera? _bitmapIdCamera;
6769

6870

6971
public HitTestingWithIdBitmapSample(ICommonSamplesContext context)
@@ -235,13 +237,27 @@ private void RenderIdBitmap()
235237
_bitmapIdSceneView = new SceneView(Scene, "BitmapID-SceneView");
236238
_bitmapIdSceneView.Initialize(SceneView.Width, SceneView.Height, dpiScaleX: 1, dpiScaleY: 1, multisampleCount: 1, supersamplingCount: 1);
237239
_bitmapIdSceneView.BackgroundColor = Color4.TransparentBlack; // Set BackgroundColor to (0,0,0,0) so it will be different from actual objects that will have alpha set to 1.
240+
241+
// SharpEngine >= v3.2.9386 does not allow re-using a camera in a different scene view, so we need to
242+
// create a new instance, and sync its properties on each render pass.
243+
_bitmapIdCamera = new TargetPositionCamera();
244+
_bitmapIdSceneView.Camera = _bitmapIdCamera;
238245
}
239246
else if (_bitmapIdSceneView.Width != SceneView.Width || _bitmapIdSceneView.Height != SceneView.Height)
240247
{
241248
_bitmapIdSceneView.Resize(SceneView.Width, SceneView.Height, renderNextFrameAfterResize: false);
242249
}
243250

244-
_bitmapIdSceneView.Camera = SceneView.Camera; // Use the same camera
251+
// Sync the camera with the original TargetPositionCamera
252+
if (targetPositionCamera != null && _bitmapIdCamera != null)
253+
{
254+
_bitmapIdCamera.Heading = targetPositionCamera.Heading;
255+
_bitmapIdCamera.Attitude = targetPositionCamera.Attitude;
256+
_bitmapIdCamera.Bank = targetPositionCamera.Bank;
257+
_bitmapIdCamera.Distance = targetPositionCamera.Distance;
258+
_bitmapIdCamera.TargetPosition = targetPositionCamera.TargetPosition;
259+
_bitmapIdCamera.RotationCenterPosition = targetPositionCamera.RotationCenterPosition;
260+
}
245261

246262
usedBitmapIdSceneView = _bitmapIdSceneView;
247263
}

Ab4d.SharpEngine.Samples.Common/HitTesting/RectangularSelectionSample.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Ab4d.SharpEngine.Transformations;
77
using Ab4d.SharpEngine.Utilities;
88
using System.Diagnostics;
9+
using Ab4d.SharpEngine.Cameras;
910
using Ab4d.Vulkan;
1011

1112
namespace Ab4d.SharpEngine.Samples.Common.HitTesting;
@@ -102,6 +103,7 @@ public abstract class RectangularSelectionSample : CommonSample
102103
private DateTime _lastCameraChangedTime;
103104

104105
private SceneView? _bitmapIdSceneView;
106+
private TargetPositionCamera? _bitmapIdCamera;
105107

106108

107109
protected RectangularSelectionSample(ICommonSamplesContext context)
@@ -613,13 +615,27 @@ private void RenderIdBitmap()
613615
_bitmapIdSceneView = new SceneView(Scene, "BitmapID-SceneView");
614616
_bitmapIdSceneView.Initialize(SceneView.Width, SceneView.Height, dpiScaleX: 1, dpiScaleY: 1, multisampleCount: 1, supersamplingCount: 1);
615617
_bitmapIdSceneView.BackgroundColor = Color4.TransparentBlack; // Set BackgroundColor to (0,0,0,0) so it will be different from actual objects that will have alpha set to 1.
618+
619+
// SharpEngine >= v3.2.9386 does not allow re-using a camera in a different scene view, so we need to
620+
// create a new instance, and sync its properties on each render pass.
621+
_bitmapIdCamera = new TargetPositionCamera();
622+
_bitmapIdSceneView.Camera = _bitmapIdCamera;
616623
}
617624
else if (_bitmapIdSceneView.Width != SceneView.Width || _bitmapIdSceneView.Height != SceneView.Height)
618625
{
619626
_bitmapIdSceneView.Resize(SceneView.Width, SceneView.Height, renderNextFrameAfterResize: false);
620627
}
621628

622-
_bitmapIdSceneView.Camera = SceneView.Camera; // Use the same camera
629+
// Sync the camera with the original TargetPositionCamera
630+
if (targetPositionCamera != null && _bitmapIdCamera != null)
631+
{
632+
_bitmapIdCamera.Heading = targetPositionCamera.Heading;
633+
_bitmapIdCamera.Attitude = targetPositionCamera.Attitude;
634+
_bitmapIdCamera.Bank = targetPositionCamera.Bank;
635+
_bitmapIdCamera.Distance = targetPositionCamera.Distance;
636+
_bitmapIdCamera.TargetPosition = targetPositionCamera.TargetPosition;
637+
_bitmapIdCamera.RotationCenterPosition = targetPositionCamera.RotationCenterPosition;
638+
}
623639

624640
usedBitmapIdSceneView = _bitmapIdSceneView;
625641
}

0 commit comments

Comments
 (0)