voila, "emu" resolution lua drawing, hacked in place of the native resolution drawing because rolanmen1 decided to destroy my surface management paradigms (i can tell because the earth is scorched with spaces instead of tabs)

This commit is contained in:
zeromus 2012-05-06 07:09:04 +00:00
parent cd0016343f
commit 857d0a5b39
3 changed files with 31 additions and 4 deletions

View File

@ -591,6 +591,18 @@ namespace BizHawk.MultiClient
return luaNativeSurfaceSet.AllocateSurface(currNativeWidth, currNativeHeight);
}
SwappableDisplaySurfaceSet luaEmuSurfaceSet = new SwappableDisplaySurfaceSet();
public void SetLuaSurfaceEmu(DisplaySurface surface) { luaEmuSurfaceSet.SetPending(surface); }
public DisplaySurface GetLuaEmuSurfaceEmu()
{
int width = 1, height = 1;
if (currentSourceSurface != null)
width = currentSourceSurface.Width;
if (currentSourceSurface != null)
height = currentSourceSurface.Height;
return luaEmuSurfaceSet.AllocateSurface(width, height);
}
int currNativeWidth, currNativeHeight;
EventWaitHandle wakeupEvent, suspendReplyEvent;
bool shutdownFlag, suspendFlag;
@ -677,11 +689,15 @@ namespace BizHawk.MultiClient
g.CompositingMode = CompositingMode.SourceCopy;
g.CompositingQuality = CompositingQuality.HighSpeed;
g.DrawImage(currentSourceSurface.PeekBitmap(), 0, 0, w, h);
g.Clip = new Region(new Rectangle(0, 0, nativeBmp.Width, nativeBmp.Height));
//switch to fancier composition for OSD overlays and such
g.CompositingMode = CompositingMode.SourceOver;
//this could have been done onto the source surface earlier and then scaled only once but the whole composition system needs revising, soo..
DisplaySurface luaEmuSurface = luaEmuSurfaceSet.GetCurrent();
if (luaEmuSurface != null) g.DrawImage(luaEmuSurface.PeekBitmap(), 0, 0, w, h);
g.Clip = new Region(new Rectangle(0, 0, nativeBmp.Width, nativeBmp.Height));
//apply a lua layer
var luaSurface = luaNativeSurfaceSet.GetCurrent();
if (luaSurface != null) g.DrawImageUnscaled(luaSurface.PeekBitmap(), 0, 0);

View File

@ -488,6 +488,11 @@ namespace BizHawk.MultiClient
luaSurface = Global.DisplayManager.GetLuaSurfaceNative();
}
public void gui_drawNewEmu()
{
luaSurface = Global.DisplayManager.GetLuaEmuSurfaceEmu();
}
/// <summary>
/// finishes the current drawing and submits it to the display manager (at native [host] resolution pre-osd)
/// you would probably want some way to specify which surface to set it to, when there are other surfaces.
@ -499,6 +504,12 @@ namespace BizHawk.MultiClient
luaSurface = null;
}
public void gui_drawFinishEmu()
{
Global.DisplayManager.SetLuaSurfaceEmu(luaSurface);
luaSurface = null;
}
/// <summary>
/// draws a random rectangle for testing purposes
/// </summary>

View File

@ -832,8 +832,8 @@ namespace BizHawk.MultiClient
{
try
{
LuaImp.gui_drawNew();
//LuaImp.gui_clearGraphics();
LuaImp.gui_drawNewEmu();
//LuaImp.gui_clearGraphics();
if (s.Enabled && s.Thread != null && !s.Paused)
{
bool prohibit = false;
@ -844,7 +844,7 @@ namespace BizHawk.MultiClient
var result = LuaImp.ResumeScript(s.Thread);
s.FrameWaiting = result.WaitForFrame;
}
LuaImp.gui_drawFinish();
LuaImp.gui_drawFinishEmu();
}
catch (Exception ex)
{