diff --git a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
index 9b15438553..e692bd52d3 100644
--- a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
+++ b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
@@ -45,15 +45,13 @@ namespace BizHawk.Client.EmuHawk
/// update Global.RenderPanel from the passed IVideoProvider
public void UpdateSource(IVideoProvider videoProvider)
{
- UpdateSourceEx(videoProvider, GlobalWin.RenderPanel);
+ UpdateSourceEx(videoProvider, GlobalWin.PresentationPanel);
}
///
/// update the passed IRenderer with the passed IVideoProvider
///
- ///
- /// also must implement IBlitter
- public void UpdateSourceEx(IVideoProvider videoProvider, IRenderer renderPanel)
+ public void UpdateSourceEx(IVideoProvider videoProvider, PresentationPanel renderPanel)
{
var newPendingSurface = sourceSurfaceSet.AllocateSurface(videoProvider.BufferWidth, videoProvider.BufferHeight, false);
newPendingSurface.AcceptIntArray(videoProvider.GetVideoBuffer());
diff --git a/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs b/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs
index 0c9d4ccfb9..2d4bf3fc22 100644
--- a/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs
+++ b/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs
@@ -10,6 +10,22 @@ using BizHawk.Bizware.BizwareGL;
namespace BizHawk.Client.EmuHawk
{
+ class UIMessage
+ {
+ public string Message;
+ public DateTime ExpireAt;
+ }
+
+ class UIDisplay
+ {
+ public string Message;
+ public int X;
+ public int Y;
+ public bool Alert;
+ public int Anchor;
+ public Color ForeColor;
+ public Color BackGround;
+ }
public class OSDManager
{
diff --git a/BizHawk.Client.EmuHawk/GlobalWin.cs b/BizHawk.Client.EmuHawk/GlobalWin.cs
index 66c32d42b5..696cc64765 100644
--- a/BizHawk.Client.EmuHawk/GlobalWin.cs
+++ b/BizHawk.Client.EmuHawk/GlobalWin.cs
@@ -13,7 +13,7 @@ namespace BizHawk.Client.EmuHawk
#endif
public static IGL GL;
public static Sound Sound;
- public static IRenderer RenderPanel;
+ public static PresentationPanel PresentationPanel;
public static OSDManager OSD = new OSDManager();
public static DisplayManager DisplayManager = new DisplayManager();
diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs
index 6a8251c2c0..526408debe 100644
--- a/BizHawk.Client.EmuHawk/MainForm.Events.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs
@@ -972,7 +972,7 @@ namespace BizHawk.Client.EmuHawk
Global.Config.VSyncThrottle = false;
if (old)
{
- GlobalWin.RenderPanel.Resized = true;
+ GlobalWin.PresentationPanel.Resized = true;
}
}
LimitFrameRateMessage();
@@ -989,7 +989,7 @@ namespace BizHawk.Client.EmuHawk
Global.Config.VSyncThrottle = false;
if (old)
{
- GlobalWin.RenderPanel.Resized = true;
+ GlobalWin.PresentationPanel.Resized = true;
}
}
}
@@ -997,7 +997,7 @@ namespace BizHawk.Client.EmuHawk
private void VsyncThrottleMenuItem_Click(object sender, EventArgs e)
{
Global.Config.VSyncThrottle ^= true;
- GlobalWin.RenderPanel.Resized = true;
+ GlobalWin.PresentationPanel.Resized = true;
if (Global.Config.VSyncThrottle)
{
Global.Config.ClockThrottle = false;
@@ -1016,7 +1016,7 @@ namespace BizHawk.Client.EmuHawk
Global.Config.VSync ^= true;
if (!Global.Config.VSyncThrottle) // when vsync throttle is on, vsync is forced to on, so no change to make here
{
- GlobalWin.RenderPanel.Resized = true;
+ GlobalWin.PresentationPanel.Resized = true;
}
}
@@ -2020,7 +2020,7 @@ namespace BizHawk.Client.EmuHawk
private void MainForm_Resize(object sender, EventArgs e)
{
- GlobalWin.RenderPanel.Resized = true;
+ GlobalWin.PresentationPanel.Resized = true;
}
private void MainForm_Shown(object sender, EventArgs e)
diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs
index ac4d6ef33e..1f334e3ef4 100644
--- a/BizHawk.Client.EmuHawk/MainForm.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.cs
@@ -94,15 +94,9 @@ namespace BizHawk.Client.EmuHawk
Database.LoadDatabase(Path.Combine(PathManager.GetExeDirectoryAbsolute(), "gamedb", "gamedb.txt"));
//TODO GL - a lot of disorganized wiring-up here
- var poop = new BizwareGLRenderPanel();
- GlobalWin.RenderPanel = poop;
- _renderTarget = poop.GraphicsControl;
- poop.GraphicsControl.SetVsync(false);
-
- Controls.Add(_renderTarget);
- Controls.SetChildIndex(_renderTarget, 0);
- _renderTarget.Dock = DockStyle.Fill;
- _renderTarget.BackColor = Color.Black;
+ GlobalWin.PresentationPanel = new PresentationPanel();
+ Controls.Add(GlobalWin.PresentationPanel);
+ Controls.SetChildIndex(GlobalWin.PresentationPanel, 0);
//TODO GL - move these event handlers somewhere less obnoxious line in the On* overrides
Load += (o, e) =>
@@ -138,9 +132,9 @@ namespace BizHawk.Client.EmuHawk
ResizeEnd += (o, e) =>
{
- if (GlobalWin.RenderPanel != null)
+ if (GlobalWin.PresentationPanel != null)
{
- GlobalWin.RenderPanel.Resized = true;
+ GlobalWin.PresentationPanel.Resized = true;
}
if (GlobalWin.Sound != null)
@@ -378,7 +372,8 @@ namespace BizHawk.Client.EmuHawk
UpdateStatusSlots();
- _renderTarget.Paint += (o, e) =>
+ //TODO POOP
+ GlobalWin.PresentationPanel.Control.Paint += (o, e) =>
{
GlobalWin.DisplayManager.NeedsToPaint = true;
};
@@ -693,8 +688,8 @@ namespace BizHawk.Client.EmuHawk
int zoom = Global.Config.TargetZoomFactor;
var area = Screen.FromControl(this).WorkingArea;
- int borderWidth = Size.Width - _renderTarget.Size.Width;
- int borderHeight = Size.Height - _renderTarget.Size.Height;
+ int borderWidth = Size.Width - GlobalWin.PresentationPanel.Control.Size.Width;
+ int borderHeight = Size.Height - GlobalWin.PresentationPanel.Control.Size.Height;
// start at target zoom and work way down until we find acceptable zoom
for (; zoom >= 1; zoom--)
@@ -709,7 +704,7 @@ namespace BizHawk.Client.EmuHawk
// Change size
Size = new Size((video.BufferWidth * zoom) + borderWidth, ((video.BufferHeight * zoom) + borderHeight));
PerformLayout();
- GlobalWin.RenderPanel.Resized = true;
+ GlobalWin.PresentationPanel.Resized = true;
// Is window off the screen at this size?
if (area.Contains(Bounds) == false)
@@ -739,7 +734,7 @@ namespace BizHawk.Client.EmuHawk
MainStatusBar.Visible = false;
PerformLayout();
- GlobalWin.RenderPanel.Resized = true;
+ GlobalWin.PresentationPanel.Resized = true;
_inFullscreen = true;
}
else
@@ -936,7 +931,6 @@ namespace BizHawk.Client.EmuHawk
private int _lastWidth = -1;
private int _lastHeight = -1;
- private Control _renderTarget;
private readonly SaveSlotManager _stateSlots = new SaveSlotManager();
// AVI/WAV state
diff --git a/BizHawk.Client.EmuHawk/RenderPanel.cs b/BizHawk.Client.EmuHawk/RenderPanel.cs
index 88bc0ff4b8..93bfb09ace 100644
--- a/BizHawk.Client.EmuHawk/RenderPanel.cs
+++ b/BizHawk.Client.EmuHawk/RenderPanel.cs
@@ -15,32 +15,21 @@ using BizHawk.Bizware.BizwareGL;
namespace BizHawk.Client.EmuHawk
{
- public interface IRenderer : IDisposable
+ ///
+ /// Handles the EmuHawk main presentation control - final display only.
+ /// Compositing, filters, etc., should be handled by DisplayManager
+ ///
+ public class PresentationPanel : IBlitter
{
- void RenderOverlay(DisplaySurface surface);
- void Render(BitmapBuffer surface);
- void Clear(Color color);
- void Present();
- bool Resized { get; set; }
- Size NativeSize { get; }
-
- ///
- /// convert coordinates. this is a dumb name
- ///
- /// desktop coordinates
- /// ivideoprovider coordinates
- sd.Point ScreenToScreen(sd.Point p);
- }
-
- //you might think it's cool to make this reusable for other windows, but it's probably a pipe dream. dont even try it. at least, refactor it into a simple render panel and some kind of NicePresentationWindow class
- public class BizwareGLRenderPanel : IRenderer, IBlitter
- {
-
- public BizwareGLRenderPanel()
+ public PresentationPanel()
{
GL = GlobalWin.GL;
GraphicsControl = GL.CreateGraphicsControl();
+ GraphicsControl.Control.Dock = DockStyle.Fill;
+ GraphicsControl.Control.BackColor = Color.Black;
+
+ //prepare a renderer
Renderer = new GuiRenderer(GL);
//pass through these events to the form. we might need a more scalable solution for mousedown etc. for zapper and whatnot.
@@ -64,6 +53,14 @@ namespace BizHawk.Client.EmuHawk
//gl shouldnt be disposed! it should be a global resource! probably managed elsewhere
}
+ public Control Control { get { return GraphicsControl.Control; } }
+ public static implicit operator Control(PresentationPanel self) { return self.GraphicsControl.Control; }
+ StringRenderer TheOneFont;
+ public Bizware.BizwareGL.GraphicsControl GraphicsControl;
+ static Bizware.BizwareGL.IGL GL;
+ GuiRenderer Renderer;
+ Texture2d LastSurfaceTexture;
+
private void HandleFullscreenToggle(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
@@ -105,12 +102,6 @@ namespace BizHawk.Client.EmuHawk
}
public sd.Rectangle ClipBounds { get; set; }
- StringRenderer TheOneFont;
- public Bizware.BizwareGL.GraphicsControl GraphicsControl;
- static Bizware.BizwareGL.IGL GL;
- GuiRenderer Renderer;
- Texture2d LastSurfaceTexture;
-
public bool Resized { get; set; }
public void Clear(Color color)
@@ -153,9 +144,11 @@ namespace BizHawk.Client.EmuHawk
int sw=1, sh=1;
public void RenderExec(BitmapBuffer surface, DisplaySurface displaySurface)
{
+ GraphicsControl.Begin();
+
if (Resized || Vsync != VsyncRequested)
{
- //recreate device
+ GraphicsControl.SetVsync(VsyncRequested);
}
bool overlay = false;
@@ -169,13 +162,18 @@ namespace BizHawk.Client.EmuHawk
if (sw != surface.Width || sh != surface.Height || LastSurfaceTexture == null)
{
LastSurfaceTexture = GL.LoadTexture(surface);
- LastSurfaceTexture.SetFilterNearest();
}
else
{
GL.LoadTextureData(LastSurfaceTexture, surface);
}
+ if(Global.Config.DispBlurry)
+ LastSurfaceTexture.SetFilterLinear();
+ else
+ LastSurfaceTexture.SetFilterNearest();
+
+
sw = surface.Width;
sh = surface.Height;
@@ -190,10 +188,9 @@ namespace BizHawk.Client.EmuHawk
float dx = (int)((vw - finalScale * surface.Width)/2);
float dy = (int)((vh - finalScale * surface.Height)/2);
- GraphicsControl.Begin();
if (!overlay)
{
- GL.ClearColor(Color.Black); //TODO set from background color
+ GL.ClearColor(Color.Black); //TODO GL - set from background color
GL.Clear(ClearBufferMask.ColorBufferBit);
}
@@ -205,6 +202,7 @@ namespace BizHawk.Client.EmuHawk
Renderer.Modelview.Scale(finalScale);
Renderer.Draw(LastSurfaceTexture);
Renderer.End();
+
GraphicsControl.End();
}
@@ -221,8 +219,6 @@ namespace BizHawk.Client.EmuHawk
}
}
-
-
public interface IBlitter
{
void Open();
@@ -235,22 +231,4 @@ namespace BizHawk.Client.EmuHawk
public interface IBlitterFont { }
-
-
- class UIMessage
- {
- public string Message;
- public DateTime ExpireAt;
- }
-
- class UIDisplay
- {
- public string Message;
- public int X;
- public int Y;
- public bool Alert;
- public int Anchor;
- public Color ForeColor;
- public Color BackGround;
- }
}
diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs
index 3b8340af85..fa2e7624f7 100644
--- a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs
+++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Client.cs
@@ -238,7 +238,7 @@ namespace BizHawk.Client.EmuHawk
)]
public static int ScreenHeight()
{
- return GlobalWin.RenderPanel.NativeSize.Height;
+ return GlobalWin.PresentationPanel.NativeSize.Height;
}
[LuaMethodAttributes(
@@ -306,7 +306,7 @@ namespace BizHawk.Client.EmuHawk
)]
public static int ScreenWidth()
{
- return GlobalWin.RenderPanel.NativeSize.Width;
+ return GlobalWin.PresentationPanel.NativeSize.Width;
}
[LuaMethodAttributes(
diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Input.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Input.cs
index 93b3f206ba..ee01876606 100644
--- a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Input.cs
+++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Input.cs
@@ -40,7 +40,7 @@ namespace BizHawk.Client.EmuHawk
{
var buttons = _lua.NewTable();
//TODO - ZEROMUS - this could use a more sophisticated system, it's just a stopgap
- var p = GlobalWin.RenderPanel.ScreenToScreen(Control.MousePosition);
+ var p = GlobalWin.PresentationPanel.ScreenToScreen(Control.MousePosition);
buttons["X"] = p.X;
buttons["Y"] = p.Y;
buttons[MouseButtons.Left.ToString()] = (Control.MouseButtons & MouseButtons.Left) != 0;