assorted cleanup and quick restore of DIspBlurry and Vsync settings
This commit is contained in:
parent
857dff9cf4
commit
25cab541b1
|
@ -45,15 +45,13 @@ namespace BizHawk.Client.EmuHawk
|
|||
/// <summary>update Global.RenderPanel from the passed IVideoProvider</summary>
|
||||
public void UpdateSource(IVideoProvider videoProvider)
|
||||
{
|
||||
UpdateSourceEx(videoProvider, GlobalWin.RenderPanel);
|
||||
UpdateSourceEx(videoProvider, GlobalWin.PresentationPanel);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// update the passed IRenderer with the passed IVideoProvider
|
||||
/// </summary>
|
||||
/// <param name="videoProvider"></param>
|
||||
/// <param name="renderPanel">also must implement IBlitter</param>
|
||||
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());
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -15,32 +15,21 @@ using BizHawk.Bizware.BizwareGL;
|
|||
|
||||
namespace BizHawk.Client.EmuHawk
|
||||
{
|
||||
public interface IRenderer : IDisposable
|
||||
/// <summary>
|
||||
/// Handles the EmuHawk main presentation control - final display only.
|
||||
/// Compositing, filters, etc., should be handled by DisplayManager
|
||||
/// </summary>
|
||||
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; }
|
||||
|
||||
/// <summary>
|
||||
/// convert coordinates. this is a dumb name
|
||||
/// </summary>
|
||||
/// <param name="p">desktop coordinates</param>
|
||||
/// <returns>ivideoprovider coordinates</returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue