Respect if overlay is toggled

This commit is contained in:
BenjaminZehowlt
2024-10-28 02:03:21 -04:00
committed by Natsumi
parent c4d958b8ba
commit e8d278753d
2 changed files with 72 additions and 40 deletions

View File

@@ -356,18 +356,18 @@ namespace VRCX
public void ExecuteVrFeedFunction(string function, string json)
{
if (VRCXVR._browser1 == null) return;
if (VRCXVR._browser1.IsLoading)
if (VRCXVR._wristOverlay == null) return;
if (VRCXVR._wristOverlay.IsLoading)
VRCXVR.Instance.Restart();
VRCXVR._browser1.ExecuteScriptAsync($"$app.{function}", json);
VRCXVR._wristOverlay.ExecuteScriptAsync($"$app.{function}", json);
}
public void ExecuteVrOverlayFunction(string function, string json)
{
if (VRCXVR._browser2 == null) return;
if (VRCXVR._browser2.IsLoading)
if (VRCXVR._hmdOverlay == null) return;
if (VRCXVR._hmdOverlay.IsLoading)
VRCXVR.Instance.Restart();
VRCXVR._browser2.ExecuteScriptAsync($"$app.{function}", json);
VRCXVR._hmdOverlay.ExecuteScriptAsync($"$app.{function}", json);
}
/// <summary>

View File

@@ -33,20 +33,28 @@ namespace VRCX
private static readonly float[] _translationRight = { 7f / 100f, -5f / 100f, 6f / 100f };
private static readonly float[] _rotationLeft = { 90f * (float)(Math.PI / 180f), 90f * (float)(Math.PI / 180f), -90f * (float)(Math.PI / 180f) };
private static readonly float[] _rotationRight = { -90f * (float)(Math.PI / 180f), -90f * (float)(Math.PI / 180f), -90f * (float)(Math.PI / 180f) };
public static OffScreenBrowser _browser1;
public static OffScreenBrowser _browser2;
public static OffScreenBrowser _wristOverlay;
public static OffScreenBrowser _hmdOverlay;
private readonly List<string[]> _deviceList;
private readonly ReaderWriterLockSlim _deviceListLock;
private bool _active;
private Device _device;
private bool _hmdOverlayActive;
private bool _menuButton;
private int _overlayHand;
private Factory _factory;
private Texture2D _texture1;
private Texture2D _texture2;
private Thread _thread;
private bool _wristOverlayActive;
private DateTime _nextOverlayUpdate;
private ulong _hmdOverlayHandle;
private bool _hmdOverlayActive;
private bool _hmdOverlayWasActive;
private ulong _wristOverlayHandle;
private bool _wristOverlayActive;
private bool _wristOverlayWasActive;
public bool IsHmdAfk { get; private set; }
static VRCXVR()
@@ -89,8 +97,10 @@ namespace VRCX
private void SetupTextures()
{
Factory f = new Factory1();
_device = new Device(f.GetAdapter(OpenVR.System.GetD3D9AdapterIndex()),
_factory ??= new Factory1();
_device?.Dispose();
_device = new Device(_factory.GetAdapter(OpenVR.System.GetD3D9AdapterIndex()),
DeviceCreationFlags.BgraSupport);
UpgradeDevice();
@@ -108,7 +118,7 @@ namespace VRCX
BindFlags = BindFlags.ShaderResource
}
);
_browser1?.UpdateRender(_device, _texture1);
_wristOverlay?.UpdateRender(_device, _texture1);
_texture2?.Dispose();
_texture2 = new Texture2D(
@@ -124,7 +134,7 @@ namespace VRCX
BindFlags = BindFlags.ShaderResource
}
);
_browser2?.UpdateRender(_device, _texture2);
_hmdOverlay?.UpdateRender(_device, _texture2);
}
private void UpgradeDevice()
@@ -176,16 +186,14 @@ namespace VRCX
var overlayVisible1 = false;
var overlayVisible2 = false;
var dashboardHandle = 0UL;
var overlayHandle1 = 0UL;
var overlayHandle2 = 0UL;
_browser1 = new OffScreenBrowser(
_wristOverlay = new OffScreenBrowser(
"file://vrcx/vr.html?1",
512,
512
);
_browser2 = new OffScreenBrowser(
_hmdOverlay = new OffScreenBrowser(
"file://vrcx/vr.html?2",
1024,
1024
@@ -264,22 +272,30 @@ namespace VRCX
logger.Error(err);
}
err = ProcessOverlay1(overlay, ref overlayHandle1, ref overlayVisible1, dashboardVisible, overlayIndex);
if (err != EVROverlayError.None &&
overlayHandle1 != 0)
if (_wristOverlayActive)
{
overlay.DestroyOverlay(overlayHandle1);
overlayHandle1 = 0;
logger.Error(err);
err = ProcessOverlay1(overlay, ref _wristOverlayHandle, ref overlayVisible1,
dashboardVisible, overlayIndex);
if (err != EVROverlayError.None &&
_wristOverlayHandle != 0)
{
overlay.DestroyOverlay(_wristOverlayHandle);
_wristOverlayHandle = 0;
logger.Error(err);
}
}
err = ProcessOverlay2(overlay, ref overlayHandle2, ref overlayVisible2, dashboardVisible);
if (err != EVROverlayError.None &&
overlayHandle2 != 0)
if (_hmdOverlayActive)
{
overlay.DestroyOverlay(overlayHandle2);
overlayHandle2 = 0;
logger.Error(err);
err = ProcessOverlay2(overlay, ref _hmdOverlayHandle, ref overlayVisible2,
dashboardVisible);
if (err != EVROverlayError.None &&
_hmdOverlayHandle != 0)
{
overlay.DestroyOverlay(_hmdOverlayHandle);
_hmdOverlayHandle = 0;
logger.Error(err);
}
}
}
}
@@ -301,8 +317,8 @@ namespace VRCX
}
}
_browser2?.Dispose();
_browser1?.Dispose();
_hmdOverlay?.Dispose();
_wristOverlay?.Dispose();
_texture2?.Dispose();
_texture1?.Dispose();
_device?.Dispose();
@@ -315,12 +331,28 @@ namespace VRCX
_wristOverlayActive = wristOverlay;
_menuButton = menuButton;
_overlayHand = overlayHand;
if (_hmdOverlayActive != _hmdOverlayWasActive && _hmdOverlayHandle != 0)
{
OpenVR.Overlay.DestroyOverlay(_hmdOverlayHandle);
_hmdOverlayHandle = 0;
}
_hmdOverlayWasActive = _hmdOverlayActive;
if (_wristOverlayActive != _wristOverlayWasActive && _wristOverlayHandle != 0)
{
OpenVR.Overlay.DestroyOverlay(_wristOverlayHandle);
_wristOverlayHandle = 0;
}
_wristOverlayWasActive = _wristOverlayActive;
}
public void Refresh()
{
_browser1.Reload();
_browser2.Reload();
_wristOverlay.Reload();
_hmdOverlay.Reload();
}
public string[][] GetDevices()
@@ -555,20 +587,20 @@ namespace VRCX
if (type == EVREventType.VREvent_MouseMove)
{
var m = e.data.mouse;
var s = _browser1.Size;
_browser1.GetBrowserHost().SendMouseMoveEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), false, CefEventFlags.None);
var s = _wristOverlay.Size;
_wristOverlay.GetBrowserHost().SendMouseMoveEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), false, CefEventFlags.None);
}
else if (type == EVREventType.VREvent_MouseButtonDown)
{
var m = e.data.mouse;
var s = _browser1.Size;
_browser1.GetBrowserHost().SendMouseClickEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), MouseButtonType.Left, false, 1, CefEventFlags.LeftMouseButton);
var s = _wristOverlay.Size;
_wristOverlay.GetBrowserHost().SendMouseClickEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), MouseButtonType.Left, false, 1, CefEventFlags.LeftMouseButton);
}
else if (type == EVREventType.VREvent_MouseButtonUp)
{
var m = e.data.mouse;
var s = _browser1.Size;
_browser1.GetBrowserHost().SendMouseClickEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), MouseButtonType.Left, true, 1, CefEventFlags.None);
var s = _wristOverlay.Size;
_wristOverlay.GetBrowserHost().SendMouseClickEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), MouseButtonType.Left, true, 1, CefEventFlags.None);
}
}