Make autolocking of ApiHawk surface less aggressive when used via Lua
This commit is contained in:
parent
d929891c97
commit
a8b1e06e44
|
@ -47,6 +47,8 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
private DisplaySurfaceID? _usingSurfaceID = null;
|
private DisplaySurfaceID? _usingSurfaceID = null;
|
||||||
|
|
||||||
|
public bool EnableLuaAutolockHack = false;
|
||||||
|
|
||||||
public bool HasGUISurface => _GUISurface != null;
|
public bool HasGUISurface => _GUISurface != null;
|
||||||
|
|
||||||
public GuiApi(Action<string> logCallback, IDisplayManagerForApi displayManager)
|
public GuiApi(Action<string> logCallback, IDisplayManagerForApi displayManager)
|
||||||
|
@ -79,12 +81,19 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
public void SetAttributes(ImageAttributes a) => _attributes = a;
|
public void SetAttributes(ImageAttributes a) => _attributes = a;
|
||||||
|
|
||||||
private DisplaySurface GetRelevantSurface(DisplaySurfaceID? surfaceID) => (surfaceID ?? _usingSurfaceID) switch
|
private DisplaySurface GetRelevantSurface(DisplaySurfaceID? surfaceID)
|
||||||
{
|
{
|
||||||
DisplaySurfaceID.EmuCore => _GUISurface,
|
switch (surfaceID ?? _usingSurfaceID)
|
||||||
DisplaySurfaceID.Client => _clientSurface,
|
{
|
||||||
_ => throw new Exception()
|
case DisplaySurfaceID.EmuCore:
|
||||||
};
|
if (_GUISurface == null && EnableLuaAutolockHack) LockEmuSurfaceLua();
|
||||||
|
return _GUISurface;
|
||||||
|
case DisplaySurfaceID.Client:
|
||||||
|
return _clientSurface;
|
||||||
|
default:
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void LockSurface(DisplaySurfaceID surfaceID)
|
private void LockSurface(DisplaySurfaceID surfaceID)
|
||||||
{
|
{
|
||||||
|
|
|
@ -98,6 +98,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
_luaContainer?.Dispose();
|
_luaContainer?.Dispose();
|
||||||
_luaContainer = Register(serviceProvider, logCallback, mainForm, displayManager, inputManager, movieSession, toolManager, config, emulator, game);
|
_luaContainer = Register(serviceProvider, logCallback, mainForm, displayManager, inputManager, movieSession, toolManager, config, emulator, game);
|
||||||
|
((GuiApi) _luaContainer.Gui).EnableLuaAutolockHack = true;
|
||||||
return _luaContainer;
|
return _luaContainer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,7 +165,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
GuiAPI.LockEmuSurfaceLua();
|
|
||||||
foreach (var lf in RegisteredFunctions.Where(l => l.Event == "OnSavestateSave"))
|
foreach (var lf in RegisteredFunctions.Where(l => l.Event == "OnSavestateSave"))
|
||||||
{
|
{
|
||||||
lf.Call(name);
|
lf.Call(name);
|
||||||
|
@ -183,7 +182,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
GuiAPI.LockEmuSurfaceLua();
|
|
||||||
foreach (var lf in RegisteredFunctions.Where(l => l.Event == "OnSavestateLoad"))
|
foreach (var lf in RegisteredFunctions.Where(l => l.Event == "OnSavestateLoad"))
|
||||||
{
|
{
|
||||||
lf.Call(name);
|
lf.Call(name);
|
||||||
|
@ -202,7 +200,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
if (IsUpdateSupressed) return;
|
if (IsUpdateSupressed) return;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
GuiAPI.LockEmuSurfaceLua();
|
|
||||||
foreach (var lf in RegisteredFunctions.Where(l => l.Event == "OnFrameStart"))
|
foreach (var lf in RegisteredFunctions.Where(l => l.Event == "OnFrameStart"))
|
||||||
{
|
{
|
||||||
lf.Call();
|
lf.Call();
|
||||||
|
@ -221,7 +218,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
if (IsUpdateSupressed) return;
|
if (IsUpdateSupressed) return;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
GuiAPI.LockEmuSurfaceLua();
|
|
||||||
foreach (var lf in RegisteredFunctions.Where(l => l.Event == "OnFrameEnd"))
|
foreach (var lf in RegisteredFunctions.Where(l => l.Event == "OnFrameEnd"))
|
||||||
{
|
{
|
||||||
lf.Call();
|
lf.Call();
|
||||||
|
@ -237,7 +233,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
public void CallExitEvent(LuaFile lf)
|
public void CallExitEvent(LuaFile lf)
|
||||||
{
|
{
|
||||||
GuiAPI.LockEmuSurfaceLua();
|
|
||||||
foreach (var exitCallback in RegisteredFunctions.ForFile(lf).ForEvent("OnExit"))
|
foreach (var exitCallback in RegisteredFunctions.ForFile(lf).ForEvent("OnExit"))
|
||||||
{
|
{
|
||||||
exitCallback.Call();
|
exitCallback.Call();
|
||||||
|
@ -306,7 +301,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
LuaLibraryBase.SetCurrentThread(lf);
|
LuaLibraryBase.SetCurrentThread(lf);
|
||||||
|
|
||||||
GuiAPI.LockEmuSurfaceLua();
|
|
||||||
var execResult = _currThread.Resume(0);
|
var execResult = _currThread.Resume(0);
|
||||||
GuiAPI.UnlockEmuSurfaceLua();
|
GuiAPI.UnlockEmuSurfaceLua();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue