Debugger: PPU Viewer - Add auto-refresh speed option (15/30/60 FPS)

This commit is contained in:
Sour 2019-01-14 22:48:57 -05:00
parent bdbb16866b
commit b2b841421f
7 changed files with 79 additions and 13 deletions

View file

@ -183,6 +183,7 @@ namespace Mesen.GUI.Config
public Point? PpuWindowLocation = null;
public bool PpuAutoRefresh = true;
public RefreshSpeed PpuAutoRefreshSpeed = RefreshSpeed.Normal;
public bool PpuRefreshOnBreak = true;
public bool PpuPartialDraw = false;
public bool PpuShowPreviousFrame = false;

View file

@ -128,7 +128,7 @@ namespace Mesen.GUI.Debugger.Controls
_hdCopyHelper.RefreshData();
}
public void RefreshViewer(bool refreshPreview = false)
public void RefreshViewer()
{
_forceChrRefresh = true;
@ -183,6 +183,7 @@ namespace Mesen.GUI.Debugger.Controls
}
}
chrBanks[i].Image = chrBankImage;
chrBanks[i].Refresh();
} finally {
handle.Free();
}

View file

@ -165,6 +165,7 @@ namespace Mesen.GUI.Debugger.Controls
}
this.picNametable.Image = target;
this.picNametable.Refresh();
if(_firstDraw) {
_currentPpuAddress = 0x2000;

View file

@ -59,6 +59,8 @@ namespace Mesen.GUI.Debugger.Controls
handle.Free();
}
this.picPalette.Refresh();
if(_paletteIndex == -1) {
UpdateColorInformation(0);
}

View file

@ -103,6 +103,8 @@ namespace Mesen.GUI.Debugger.Controls
SelectSpriteUnderCursor();
}
CreateScreenPreview();
picPreview.Refresh();
picSprites.Refresh();
if(_firstDraw) {
//Update the UI with the first sprite when showing for the first time

View file

@ -38,6 +38,10 @@ namespace Mesen.GUI.Debugger
this.mnuClose = new System.Windows.Forms.ToolStripMenuItem();
this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.mnuRefresh = new System.Windows.Forms.ToolStripMenuItem();
this.autorefreshSpeedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.mnuAutoRefreshLow = new System.Windows.Forms.ToolStripMenuItem();
this.mnuAutoRefreshNormal = new System.Windows.Forms.ToolStripMenuItem();
this.mnuAutoRefreshHigh = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
this.mnuAutoRefresh = new System.Windows.Forms.ToolStripMenuItem();
this.mnuRefreshOnBreak = new System.Windows.Forms.ToolStripMenuItem();
@ -90,6 +94,7 @@ namespace Mesen.GUI.Debugger
//
this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.mnuRefresh,
this.autorefreshSpeedToolStripMenuItem,
this.toolStripMenuItem1,
this.mnuAutoRefresh,
this.mnuRefreshOnBreak});
@ -105,6 +110,38 @@ namespace Mesen.GUI.Debugger
this.mnuRefresh.Text = "Refresh";
this.mnuRefresh.Click += new System.EventHandler(this.mnuRefresh_Click);
//
// autorefreshSpeedToolStripMenuItem
//
this.autorefreshSpeedToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.mnuAutoRefreshLow,
this.mnuAutoRefreshNormal,
this.mnuAutoRefreshHigh});
this.autorefreshSpeedToolStripMenuItem.Image = global::Mesen.GUI.Properties.Resources.Speed;
this.autorefreshSpeedToolStripMenuItem.Name = "autorefreshSpeedToolStripMenuItem";
this.autorefreshSpeedToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.autorefreshSpeedToolStripMenuItem.Text = "Auto-refresh Speed";
//
// mnuAutoRefreshLow
//
this.mnuAutoRefreshLow.Name = "mnuAutoRefreshLow";
this.mnuAutoRefreshLow.Size = new System.Drawing.Size(159, 22);
this.mnuAutoRefreshLow.Text = "Low (15 FPS)";
this.mnuAutoRefreshLow.Click += new System.EventHandler(this.mnuAutoRefreshSpeed_Click);
//
// mnuAutoRefreshNormal
//
this.mnuAutoRefreshNormal.Name = "mnuAutoRefreshNormal";
this.mnuAutoRefreshNormal.Size = new System.Drawing.Size(159, 22);
this.mnuAutoRefreshNormal.Text = "Normal (30 FPS)";
this.mnuAutoRefreshNormal.Click += new System.EventHandler(this.mnuAutoRefreshSpeed_Click);
//
// mnuAutoRefreshHigh
//
this.mnuAutoRefreshHigh.Name = "mnuAutoRefreshHigh";
this.mnuAutoRefreshHigh.Size = new System.Drawing.Size(159, 22);
this.mnuAutoRefreshHigh.Text = "High (60 FPS)";
this.mnuAutoRefreshHigh.Click += new System.EventHandler(this.mnuAutoRefreshSpeed_Click);
//
// toolStripMenuItem1
//
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
@ -271,5 +308,9 @@ namespace Mesen.GUI.Debugger
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem mnuRefreshOnBreak;
private Controls.ctrlScanlineCycleSelect ctrlScanlineCycle;
private System.Windows.Forms.ToolStripMenuItem autorefreshSpeedToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem mnuAutoRefreshLow;
private System.Windows.Forms.ToolStripMenuItem mnuAutoRefreshNormal;
private System.Windows.Forms.ToolStripMenuItem mnuAutoRefreshHigh;
}
}

View file

@ -1,13 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Mesen.GUI.Config;
using Mesen.GUI.Forms;
@ -69,6 +60,7 @@ namespace Mesen.GUI.Debugger
this.ctrlPaletteViewer.RefreshViewer();
this.InitShortcuts();
this.UpdateRefreshSpeedMenu();
}
}
@ -96,11 +88,16 @@ namespace Mesen.GUI.Debugger
case InteropEmu.ConsoleNotificationType.PpuViewerDisplayFrame:
if(e.Parameter.ToInt32() == _ppuViewerId) {
if(ConfigManager.Config.DebugInfo.PpuAutoRefresh && !_refreshing && (DateTime.Now - _lastUpdate).Milliseconds > 66) {
//Update at 15 fps most
int refreshDelay = 60;
switch(ConfigManager.Config.DebugInfo.PpuAutoRefreshSpeed) {
case RefreshSpeed.Low: refreshDelay= 60; break;
case RefreshSpeed.Normal: refreshDelay = 30; break;
case RefreshSpeed.High: refreshDelay = 12; break;
}
if(ConfigManager.Config.DebugInfo.PpuAutoRefresh && !_refreshing && (DateTime.Now - _lastUpdate).Milliseconds > refreshDelay) {
_lastUpdate = DateTime.Now;
this.GetData();
this.BeginInvoke((MethodInvoker)(() => this.RefreshViewers()));
_lastUpdate = DateTime.Now;
}
}
break;
@ -210,5 +207,26 @@ namespace Mesen.GUI.Debugger
}
tabMain.SelectTab(tpgChrViewer);
}
private void UpdateRefreshSpeedMenu()
{
mnuAutoRefreshLow.Checked = ConfigManager.Config.DebugInfo.PpuAutoRefreshSpeed == RefreshSpeed.Low;
mnuAutoRefreshNormal.Checked = ConfigManager.Config.DebugInfo.PpuAutoRefreshSpeed == RefreshSpeed.Normal;
mnuAutoRefreshHigh.Checked = ConfigManager.Config.DebugInfo.PpuAutoRefreshSpeed == RefreshSpeed.High;
}
private void mnuAutoRefreshSpeed_Click(object sender, EventArgs e)
{
if(sender == mnuAutoRefreshLow) {
ConfigManager.Config.DebugInfo.PpuAutoRefreshSpeed = RefreshSpeed.Low;
} else if(sender == mnuAutoRefreshNormal) {
ConfigManager.Config.DebugInfo.PpuAutoRefreshSpeed = RefreshSpeed.Normal;
} else if(sender == mnuAutoRefreshHigh) {
ConfigManager.Config.DebugInfo.PpuAutoRefreshSpeed = RefreshSpeed.High;
}
ConfigManager.ApplyChanges();
UpdateRefreshSpeedMenu();
}
}
}