Video options - Vertical sync, Aspect Ratio + GUI

This commit is contained in:
Souryo 2016-01-06 20:34:45 -05:00
parent 8d15b309c5
commit d6bc37726c
9 changed files with 327 additions and 98 deletions

View file

@ -7,6 +7,7 @@ enum EmulationFlags
{
Paused = 0x01,
ShowFPS = 0x02,
VerticalSync = 0x04,
};
enum class AudioChannel
@ -59,6 +60,7 @@ class EmulationSettings
{
private:
static uint32_t _flags;
static bool _audioEnabled;
static uint32_t _audioLatency;
static double _channelVolume[5];
@ -72,12 +74,12 @@ private:
static uint32_t _videoScale;
public:
static void SetFlags(uint32_t flags)
static void SetFlags(EmulationFlags flags)
{
_flags |= flags;
}
static void ClearFlags(uint32_t flags)
static void ClearFlags(EmulationFlags flags)
{
_flags &= ~flags;
}

View file

@ -19,6 +19,9 @@ namespace Mesen.GUI.Config
public UInt32 OverscanBottom = 8;
public UInt32 VideoScale = 2;
public VideoFilterType VideoFilter = VideoFilterType.None;
public VideoAspectRatio AspectRatio = VideoAspectRatio.Auto;
public bool VerticalSync = true;
public bool FullscreenMode = false;
public VideoInfo()
{
@ -30,10 +33,16 @@ namespace Mesen.GUI.Config
InteropEmu.SetEmulationSpeed(videoInfo.EmulationSpeed);
if(ConfigManager.Config.VideoInfo.ShowFPS) {
InteropEmu.SetFlags((UInt32)EmulationFlags.ShowFPS);
if(videoInfo.ShowFPS) {
InteropEmu.SetFlags(EmulationFlags.ShowFPS);
} else {
InteropEmu.ClearFlags((UInt32)EmulationFlags.ShowFPS);
InteropEmu.ClearFlags(EmulationFlags.ShowFPS);
}
if(videoInfo.VerticalSync) {
InteropEmu.SetFlags(EmulationFlags.VerticalSync);
} else {
InteropEmu.ClearFlags(EmulationFlags.VerticalSync);
}
InteropEmu.SetOverscanDimensions(videoInfo.OverscanLeft, videoInfo.OverscanRight, videoInfo.OverscanTop, videoInfo.OverscanBottom);

View file

@ -28,6 +28,18 @@
private void InitializeComponent()
{
this.tlpMain = new System.Windows.Forms.TableLayoutPanel();
this.chkShowFps = new System.Windows.Forms.CheckBox();
this.flowLayoutPanel6 = new System.Windows.Forms.FlowLayoutPanel();
this.lblEmulationSpeed = new System.Windows.Forms.Label();
this.nudEmulationSpeed = new System.Windows.Forms.NumericUpDown();
this.lblEmuSpeedHint = new System.Windows.Forms.Label();
this.lblVideoScale = new System.Windows.Forms.Label();
this.lblVideoFilter = new System.Windows.Forms.Label();
this.cboScale = new System.Windows.Forms.ComboBox();
this.cboFilter = new System.Windows.Forms.ComboBox();
this.tabMain = new System.Windows.Forms.TabControl();
this.tpgGeneral = new System.Windows.Forms.TabPage();
this.tpgOverscan = new System.Windows.Forms.TabPage();
this.grpCropping = new System.Windows.Forms.GroupBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.picOverscan = new System.Windows.Forms.PictureBox();
@ -43,12 +55,17 @@
this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel();
this.lblRight = new System.Windows.Forms.Label();
this.nudOverscanRight = new System.Windows.Forms.NumericUpDown();
this.chkShowFps = new System.Windows.Forms.CheckBox();
this.flowLayoutPanel6 = new System.Windows.Forms.FlowLayoutPanel();
this.lblEmulationSpeed = new System.Windows.Forms.Label();
this.nudEmulationSpeed = new System.Windows.Forms.NumericUpDown();
this.lblEmuSpeedHint = new System.Windows.Forms.Label();
this.chkVerticalSync = new System.Windows.Forms.CheckBox();
this.cboAspectRatio = new System.Windows.Forms.ComboBox();
this.lblDisplayRatio = new System.Windows.Forms.Label();
this.tpgPalette = new System.Windows.Forms.TabPage();
this.chkFullscreenMode = new System.Windows.Forms.CheckBox();
this.tlpMain.SuspendLayout();
this.flowLayoutPanel6.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudEmulationSpeed)).BeginInit();
this.tabMain.SuspendLayout();
this.tpgGeneral.SuspendLayout();
this.tpgOverscan.SuspendLayout();
this.grpCropping.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picOverscan)).BeginInit();
@ -60,8 +77,6 @@
((System.ComponentModel.ISupportInitialize)(this.nudOverscanBottom)).BeginInit();
this.flowLayoutPanel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudOverscanRight)).BeginInit();
this.flowLayoutPanel6.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudEmulationSpeed)).BeginInit();
this.SuspendLayout();
//
// baseConfigPanel
@ -71,29 +86,180 @@
//
// tlpMain
//
this.tlpMain.ColumnCount = 1;
this.tlpMain.ColumnCount = 2;
this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tlpMain.Controls.Add(this.grpCropping, 0, 2);
this.tlpMain.Controls.Add(this.chkShowFps, 0, 1);
this.tlpMain.Controls.Add(this.flowLayoutPanel6, 0, 0);
this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tlpMain.Controls.Add(this.chkFullscreenMode, 0, 4);
this.tlpMain.Controls.Add(this.lblVideoScale, 0, 0);
this.tlpMain.Controls.Add(this.lblVideoFilter, 0, 1);
this.tlpMain.Controls.Add(this.cboScale, 1, 0);
this.tlpMain.Controls.Add(this.cboFilter, 1, 1);
this.tlpMain.Controls.Add(this.chkVerticalSync, 0, 3);
this.tlpMain.Controls.Add(this.cboAspectRatio, 1, 2);
this.tlpMain.Controls.Add(this.lblDisplayRatio, 0, 2);
this.tlpMain.Controls.Add(this.flowLayoutPanel6, 1, 6);
this.tlpMain.Controls.Add(this.lblEmulationSpeed, 0, 6);
this.tlpMain.Controls.Add(this.chkShowFps, 0, 5);
this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpMain.Location = new System.Drawing.Point(0, 0);
this.tlpMain.Location = new System.Drawing.Point(3, 3);
this.tlpMain.Margin = new System.Windows.Forms.Padding(0, 0, 0, 0);
this.tlpMain.Name = "tlpMain";
this.tlpMain.RowCount = 3;
this.tlpMain.RowCount = 8;
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tlpMain.Size = new System.Drawing.Size(362, 308);
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpMain.Size = new System.Drawing.Size(348, 276);
this.tlpMain.TabIndex = 1;
//
// chkShowFps
//
this.chkShowFps.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.chkShowFps.AutoSize = true;
this.tlpMain.SetColumnSpan(this.chkShowFps, 2);
this.chkShowFps.Location = new System.Drawing.Point(3, 130);
this.chkShowFps.Name = "chkShowFps";
this.chkShowFps.Size = new System.Drawing.Size(76, 17);
this.chkShowFps.TabIndex = 9;
this.chkShowFps.Text = "Show FPS";
this.chkShowFps.UseVisualStyleBackColor = true;
//
// flowLayoutPanel6
//
this.flowLayoutPanel6.AutoSize = true;
this.flowLayoutPanel6.Controls.Add(this.nudEmulationSpeed);
this.flowLayoutPanel6.Controls.Add(this.lblEmuSpeedHint);
this.flowLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill;
this.flowLayoutPanel6.Location = new System.Drawing.Point(96, 150);
this.flowLayoutPanel6.Margin = new System.Windows.Forms.Padding(0);
this.flowLayoutPanel6.Name = "flowLayoutPanel6";
this.flowLayoutPanel6.Size = new System.Drawing.Size(252, 26);
this.flowLayoutPanel6.TabIndex = 10;
//
// lblEmulationSpeed
//
this.lblEmulationSpeed.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.lblEmulationSpeed.AutoSize = true;
this.lblEmulationSpeed.Location = new System.Drawing.Point(3, 156);
this.lblEmulationSpeed.Name = "lblEmulationSpeed";
this.lblEmulationSpeed.Size = new System.Drawing.Size(90, 13);
this.lblEmulationSpeed.TabIndex = 0;
this.lblEmulationSpeed.Text = "Emulation Speed:";
//
// nudEmulationSpeed
//
this.nudEmulationSpeed.Location = new System.Drawing.Point(3, 3);
this.nudEmulationSpeed.Maximum = new decimal(new int[] {
500,
0,
0,
0});
this.nudEmulationSpeed.Name = "nudEmulationSpeed";
this.nudEmulationSpeed.Size = new System.Drawing.Size(48, 20);
this.nudEmulationSpeed.TabIndex = 1;
//
// lblEmuSpeedHint
//
this.lblEmuSpeedHint.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.lblEmuSpeedHint.AutoSize = true;
this.lblEmuSpeedHint.Location = new System.Drawing.Point(57, 6);
this.lblEmuSpeedHint.Name = "lblEmuSpeedHint";
this.lblEmuSpeedHint.Size = new System.Drawing.Size(107, 13);
this.lblEmuSpeedHint.TabIndex = 2;
this.lblEmuSpeedHint.Text = "(0 = Maximum speed)";
//
// lblVideoScale
//
this.lblVideoScale.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.lblVideoScale.AutoSize = true;
this.lblVideoScale.Location = new System.Drawing.Point(3, 7);
this.lblVideoScale.Name = "lblVideoScale";
this.lblVideoScale.Size = new System.Drawing.Size(37, 13);
this.lblVideoScale.TabIndex = 11;
this.lblVideoScale.Text = "Scale:";
//
// lblVideoFilter
//
this.lblVideoFilter.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.lblVideoFilter.AutoSize = true;
this.lblVideoFilter.Location = new System.Drawing.Point(3, 34);
this.lblVideoFilter.Name = "lblVideoFilter";
this.lblVideoFilter.Size = new System.Drawing.Size(32, 13);
this.lblVideoFilter.TabIndex = 12;
this.lblVideoFilter.Text = "Filter:";
//
// cboScale
//
this.cboScale.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboScale.FormattingEnabled = true;
this.cboScale.Items.AddRange(new object[] {
"1x",
"2x",
"3x",
"4x"});
this.cboScale.Location = new System.Drawing.Point(99, 3);
this.cboScale.Name = "cboScale";
this.cboScale.Size = new System.Drawing.Size(48, 21);
this.cboScale.TabIndex = 13;
//
// cboFilter
//
this.cboFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboFilter.FormattingEnabled = true;
this.cboFilter.Items.AddRange(new object[] {
"None",
"NTSC"});
this.cboFilter.Location = new System.Drawing.Point(99, 30);
this.cboFilter.Name = "cboFilter";
this.cboFilter.Size = new System.Drawing.Size(76, 21);
this.cboFilter.TabIndex = 14;
//
// tabMain
//
this.tabMain.Controls.Add(this.tpgGeneral);
this.tabMain.Controls.Add(this.tpgOverscan);
this.tabMain.Controls.Add(this.tpgPalette);
this.tabMain.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabMain.Location = new System.Drawing.Point(0, 0);
this.tabMain.Name = "tabMain";
this.tabMain.SelectedIndex = 0;
this.tabMain.Size = new System.Drawing.Size(362, 308);
this.tabMain.TabIndex = 2;
//
// tpgGeneral
//
this.tpgGeneral.Controls.Add(this.tlpMain);
this.tpgGeneral.Location = new System.Drawing.Point(4, 22);
this.tpgGeneral.Name = "tpgGeneral";
this.tpgGeneral.Padding = new System.Windows.Forms.Padding(3);
this.tpgGeneral.Size = new System.Drawing.Size(354, 282);
this.tpgGeneral.TabIndex = 0;
this.tpgGeneral.Text = "General";
this.tpgGeneral.UseVisualStyleBackColor = true;
//
// tpgOverscan
//
this.tpgOverscan.Controls.Add(this.grpCropping);
this.tpgOverscan.Location = new System.Drawing.Point(4, 22);
this.tpgOverscan.Name = "tpgOverscan";
this.tpgOverscan.Padding = new System.Windows.Forms.Padding(3);
this.tpgOverscan.Size = new System.Drawing.Size(354, 282);
this.tpgOverscan.TabIndex = 1;
this.tpgOverscan.Text = "Overscan";
this.tpgOverscan.UseVisualStyleBackColor = true;
//
// grpCropping
//
this.grpCropping.Controls.Add(this.tableLayoutPanel1);
this.grpCropping.Dock = System.Windows.Forms.DockStyle.Fill;
this.grpCropping.Location = new System.Drawing.Point(3, 52);
this.grpCropping.Location = new System.Drawing.Point(3, 3);
this.grpCropping.Name = "grpCropping";
this.grpCropping.Size = new System.Drawing.Size(356, 253);
this.grpCropping.TabIndex = 7;
this.grpCropping.Size = new System.Drawing.Size(348, 276);
this.grpCropping.TabIndex = 8;
this.grpCropping.TabStop = false;
this.grpCropping.Text = "Video Cropping";
//
@ -246,74 +412,84 @@
this.nudOverscanRight.Size = new System.Drawing.Size(50, 20);
this.nudOverscanRight.TabIndex = 1;
//
// chkShowFps
// chkVerticalSync
//
this.chkShowFps.AutoSize = true;
this.chkShowFps.Location = new System.Drawing.Point(3, 29);
this.chkShowFps.Name = "chkShowFps";
this.chkShowFps.Size = new System.Drawing.Size(76, 17);
this.chkShowFps.TabIndex = 9;
this.chkShowFps.Text = "Show FPS";
this.chkShowFps.UseVisualStyleBackColor = true;
this.chkVerticalSync.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.chkVerticalSync.AutoSize = true;
this.tlpMain.SetColumnSpan(this.chkVerticalSync, 2);
this.chkVerticalSync.Location = new System.Drawing.Point(3, 84);
this.chkVerticalSync.Name = "chkVerticalSync";
this.chkVerticalSync.Size = new System.Drawing.Size(121, 17);
this.chkVerticalSync.TabIndex = 15;
this.chkVerticalSync.Text = "Enable vertical sync";
this.chkVerticalSync.UseVisualStyleBackColor = true;
//
// flowLayoutPanel6
// cboAspectRatio
//
this.flowLayoutPanel6.AutoSize = true;
this.flowLayoutPanel6.Controls.Add(this.lblEmulationSpeed);
this.flowLayoutPanel6.Controls.Add(this.nudEmulationSpeed);
this.flowLayoutPanel6.Controls.Add(this.lblEmuSpeedHint);
this.flowLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill;
this.flowLayoutPanel6.Location = new System.Drawing.Point(0, 0);
this.flowLayoutPanel6.Margin = new System.Windows.Forms.Padding(0);
this.flowLayoutPanel6.Name = "flowLayoutPanel6";
this.flowLayoutPanel6.Size = new System.Drawing.Size(362, 26);
this.flowLayoutPanel6.TabIndex = 10;
this.cboAspectRatio.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboAspectRatio.FormattingEnabled = true;
this.cboAspectRatio.Items.AddRange(new object[] {
"Auto",
"NTSC (8:7)",
"PAL (18:13)",
"Standard (4:3)",
"Widescreen (16:9)"});
this.cboAspectRatio.Location = new System.Drawing.Point(99, 57);
this.cboAspectRatio.Name = "cboAspectRatio";
this.cboAspectRatio.Size = new System.Drawing.Size(121, 21);
this.cboAspectRatio.TabIndex = 16;
//
// lblEmulationSpeed
// lblDisplayRatio
//
this.lblEmulationSpeed.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.lblEmulationSpeed.AutoSize = true;
this.lblEmulationSpeed.Location = new System.Drawing.Point(3, 6);
this.lblEmulationSpeed.Name = "lblEmulationSpeed";
this.lblEmulationSpeed.Size = new System.Drawing.Size(90, 13);
this.lblEmulationSpeed.TabIndex = 0;
this.lblEmulationSpeed.Text = "Emulation Speed:";
this.lblDisplayRatio.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.lblDisplayRatio.AutoSize = true;
this.lblDisplayRatio.Location = new System.Drawing.Point(3, 61);
this.lblDisplayRatio.Name = "lblDisplayRatio";
this.lblDisplayRatio.Size = new System.Drawing.Size(71, 13);
this.lblDisplayRatio.TabIndex = 17;
this.lblDisplayRatio.Text = "Aspect Ratio:";
//
// nudEmulationSpeed
// tpgPalette
//
this.nudEmulationSpeed.Location = new System.Drawing.Point(99, 3);
this.nudEmulationSpeed.Maximum = new decimal(new int[] {
500,
0,
0,
0});
this.nudEmulationSpeed.Name = "nudEmulationSpeed";
this.nudEmulationSpeed.Size = new System.Drawing.Size(48, 20);
this.nudEmulationSpeed.TabIndex = 1;
this.tpgPalette.Location = new System.Drawing.Point(4, 22);
this.tpgPalette.Name = "tpgPalette";
this.tpgPalette.Padding = new System.Windows.Forms.Padding(3);
this.tpgPalette.Size = new System.Drawing.Size(354, 282);
this.tpgPalette.TabIndex = 2;
this.tpgPalette.Text = "Palette";
this.tpgPalette.UseVisualStyleBackColor = true;
//
// lblEmuSpeedHint
// chkFullscreenMode
//
this.lblEmuSpeedHint.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.lblEmuSpeedHint.AutoSize = true;
this.lblEmuSpeedHint.Location = new System.Drawing.Point(153, 6);
this.lblEmuSpeedHint.Name = "lblEmuSpeedHint";
this.lblEmuSpeedHint.Size = new System.Drawing.Size(107, 13);
this.lblEmuSpeedHint.TabIndex = 2;
this.lblEmuSpeedHint.Text = "(0 = Maximum speed)";
this.chkFullscreenMode.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.chkFullscreenMode.AutoSize = true;
this.tlpMain.SetColumnSpan(this.chkFullscreenMode, 2);
this.chkFullscreenMode.Location = new System.Drawing.Point(3, 107);
this.chkFullscreenMode.Name = "chkFullscreenMode";
this.chkFullscreenMode.Size = new System.Drawing.Size(113, 17);
this.chkFullscreenMode.TabIndex = 18;
this.chkFullscreenMode.Text = "Fullscreen window";
this.chkFullscreenMode.UseVisualStyleBackColor = true;
//
// frmVideoConfig
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(362, 337);
this.Controls.Add(this.tlpMain);
this.Controls.Add(this.tabMain);
this.Name = "frmVideoConfig";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Video Options";
this.Controls.SetChildIndex(this.baseConfigPanel, 0);
this.Controls.SetChildIndex(this.tlpMain, 0);
this.Controls.SetChildIndex(this.tabMain, 0);
this.tlpMain.ResumeLayout(false);
this.tlpMain.PerformLayout();
this.flowLayoutPanel6.ResumeLayout(false);
this.flowLayoutPanel6.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudEmulationSpeed)).EndInit();
this.tabMain.ResumeLayout(false);
this.tpgGeneral.ResumeLayout(false);
this.tpgOverscan.ResumeLayout(false);
this.grpCropping.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.picOverscan)).EndInit();
@ -329,9 +505,6 @@
this.flowLayoutPanel2.ResumeLayout(false);
this.flowLayoutPanel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudOverscanRight)).EndInit();
this.flowLayoutPanel6.ResumeLayout(false);
this.flowLayoutPanel6.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudEmulationSpeed)).EndInit();
this.ResumeLayout(false);
}
@ -339,25 +512,37 @@
#endregion
private System.Windows.Forms.TableLayoutPanel tlpMain;
private System.Windows.Forms.GroupBox grpCropping;
private System.Windows.Forms.CheckBox chkShowFps;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel3;
private System.Windows.Forms.Label lblLeft;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel4;
private System.Windows.Forms.Label lblTop;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel5;
private System.Windows.Forms.Label lblBottom;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2;
private System.Windows.Forms.Label lblRight;
private System.Windows.Forms.PictureBox picOverscan;
private System.Windows.Forms.NumericUpDown nudOverscanLeft;
private System.Windows.Forms.NumericUpDown nudOverscanTop;
private System.Windows.Forms.NumericUpDown nudOverscanBottom;
private System.Windows.Forms.NumericUpDown nudOverscanRight;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel6;
private System.Windows.Forms.Label lblEmulationSpeed;
private System.Windows.Forms.NumericUpDown nudEmulationSpeed;
private System.Windows.Forms.Label lblEmuSpeedHint;
private System.Windows.Forms.Label lblVideoScale;
private System.Windows.Forms.Label lblVideoFilter;
private System.Windows.Forms.ComboBox cboScale;
private System.Windows.Forms.ComboBox cboFilter;
private System.Windows.Forms.CheckBox chkVerticalSync;
private System.Windows.Forms.ComboBox cboAspectRatio;
private System.Windows.Forms.Label lblDisplayRatio;
private System.Windows.Forms.TabControl tabMain;
private System.Windows.Forms.TabPage tpgGeneral;
private System.Windows.Forms.TabPage tpgOverscan;
private System.Windows.Forms.GroupBox grpCropping;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.PictureBox picOverscan;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel3;
private System.Windows.Forms.Label lblLeft;
private System.Windows.Forms.NumericUpDown nudOverscanLeft;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel4;
private System.Windows.Forms.Label lblTop;
private System.Windows.Forms.NumericUpDown nudOverscanTop;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel5;
private System.Windows.Forms.Label lblBottom;
private System.Windows.Forms.NumericUpDown nudOverscanBottom;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2;
private System.Windows.Forms.Label lblRight;
private System.Windows.Forms.NumericUpDown nudOverscanRight;
private System.Windows.Forms.CheckBox chkFullscreenMode;
private System.Windows.Forms.TabPage tpgPalette;
}
}

View file

@ -21,6 +21,13 @@ namespace Mesen.GUI.Forms.Config
AddBinding("EmulationSpeed", nudEmulationSpeed);
AddBinding("ShowFPS", chkShowFps);
AddBinding("VerticalSync", chkVerticalSync);
AddBinding("FullscreenMode", chkFullscreenMode);
AddBinding("VideoScale", cboScale);
AddBinding("AspectRatio", cboAspectRatio);
AddBinding("VideoFilter", cboFilter);
AddBinding("OverscanLeft", nudOverscanLeft);
AddBinding("OverscanRight", nudOverscanRight);
AddBinding("OverscanTop", nudOverscanTop);

View file

@ -393,14 +393,14 @@
// mnuNoneFilter
//
this.mnuNoneFilter.Name = "mnuNoneFilter";
this.mnuNoneFilter.Size = new System.Drawing.Size(152, 22);
this.mnuNoneFilter.Size = new System.Drawing.Size(104, 22);
this.mnuNoneFilter.Text = "None";
this.mnuNoneFilter.Click += new System.EventHandler(this.mnuNoneFilter_Click);
//
// mnuNtscFilter
//
this.mnuNtscFilter.Name = "mnuNtscFilter";
this.mnuNtscFilter.Size = new System.Drawing.Size(152, 22);
this.mnuNtscFilter.Size = new System.Drawing.Size(104, 22);
this.mnuNtscFilter.Text = "NTSC";
this.mnuNtscFilter.Click += new System.EventHandler(this.mnuNtscFilter_Click);
//
@ -743,7 +743,7 @@
this.dxViewer.Location = new System.Drawing.Point(0, 24);
this.dxViewer.Margin = new System.Windows.Forms.Padding(0);
this.dxViewer.Name = "dxViewer";
this.dxViewer.Size = new System.Drawing.Size(1024, 960);
this.dxViewer.Size = new System.Drawing.Size(263, 176);
this.dxViewer.TabIndex = 1;
//
// frmMain
@ -752,6 +752,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.BackColor = System.Drawing.Color.Black;
this.ClientSize = new System.Drawing.Size(365, 272);
this.Controls.Add(this.dxViewer);
this.Controls.Add(this.menuStrip);

View file

@ -174,6 +174,20 @@ namespace Mesen.GUI.Forms
UpdateEmulationSpeedMenu();
UpdateScaleMenu(ConfigManager.Config.VideoInfo.VideoScale);
UpdateFilterMenu(ConfigManager.Config.VideoInfo.VideoFilter);
UpdateViewerSize();
}
private void UpdateViewerSize()
{
InteropEmu.ScreenSize size = InteropEmu.GetScreenSize();
switch(ConfigManager.Config.VideoInfo.AspectRatio) {
case VideoAspectRatio.NTSC: size.Width = (int)(size.Height * 8 / 7.0); break;
case VideoAspectRatio.PAL: size.Width = (int)(size.Height * 18 / 13.0); break;
case VideoAspectRatio.Standard: size.Width = (int)(size.Height * 4 / 3.0); break;
case VideoAspectRatio.Widescreen: size.Width = (int)(size.Height * 16 / 9.0); break;
}
dxViewer.Size = new Size(size.Width, size.Height);
}
private void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
@ -192,8 +206,7 @@ namespace Mesen.GUI.Forms
CheatInfo.ClearCheats();
} else if(e.NotificationType == InteropEmu.ConsoleNotificationType.ResolutionChanged) {
this.BeginInvoke((MethodInvoker)(() => {
InteropEmu.ScreenSize size = InteropEmu.GetScreenSize();
dxViewer.Size = new Size(size.Width, size.Height);
UpdateVideoSettings();
}));
}
UpdateMenus();

View file

@ -68,8 +68,8 @@ namespace Mesen.GUI
[DllImport(DLLPath)] public static extern void CheatAddProActionRocky(UInt32 code);
[DllImport(DLLPath)] public static extern void CheatClear();
[DllImport(DLLPath)] public static extern void SetFlags(UInt32 flags);
[DllImport(DLLPath)] public static extern void ClearFlags(UInt32 flags);
[DllImport(DLLPath)] public static extern void SetFlags(EmulationFlags flags);
[DllImport(DLLPath)] public static extern void ClearFlags(EmulationFlags flags);
[DllImport(DLLPath)] public static extern void SetChannelVolume(UInt32 channel, double volume);
[DllImport(DLLPath)] public static extern void SetAudioLatency(UInt32 msLatency);
[DllImport(DLLPath)] public static extern void SetNesModel(NesModel model);
@ -77,6 +77,7 @@ namespace Mesen.GUI
[DllImport(DLLPath)] public static extern void SetOverscanDimensions(UInt32 left, UInt32 right, UInt32 top, UInt32 bottom);
[DllImport(DLLPath)] public static extern void SetVideoScale(UInt32 scale);
[DllImport(DLLPath)] public static extern void SetVideoFilter(VideoFilterType filter);
[DllImport(DLLPath, EntryPoint="GetScreenSize")] private static extern void GetScreenSizeWrapper(out ScreenSize size);
[DllImport(DLLPath)] public static extern void DebugInitialize();
@ -410,6 +411,7 @@ namespace Mesen.GUI
{
Paused = 0x01,
ShowFPS = 0x02,
VerticalSync = 0x04,
}
public enum BreakpointType
@ -432,6 +434,15 @@ namespace Mesen.GUI
NTSC = 1,
}
public enum VideoAspectRatio
{
Auto = 0,
NTSC = 1,
PAL = 2,
Standard = 3,
Widescreen = 4
}
public enum DebugMemoryType
{
CpuMemory = 0,

View file

@ -201,8 +201,8 @@ namespace InteropEmu {
DllExport void __stdcall CheatAddProActionRocky(uint32_t code) { CheatManager::AddProActionRockyCode(code); }
DllExport void __stdcall CheatClear() { CheatManager::ClearCodes(); }
DllExport void __stdcall SetFlags(uint32_t flags) { EmulationSettings::SetFlags(flags); }
DllExport void __stdcall ClearFlags(uint32_t flags) { EmulationSettings::ClearFlags(flags); }
DllExport void __stdcall SetFlags(EmulationFlags flags) { EmulationSettings::SetFlags(flags); }
DllExport void __stdcall ClearFlags(EmulationFlags flags) { EmulationSettings::ClearFlags(flags); }
DllExport void __stdcall SetChannelVolume(uint32_t channel, double volume) { EmulationSettings::SetChannelVolume((AudioChannel)channel, volume); }
DllExport void __stdcall SetAudioLatency(uint32_t msLatency) { EmulationSettings::SetAudioLatency(msLatency); }
DllExport void __stdcall SetNesModel(uint32_t model) { EmulationSettings::SetNesModel((NesModel)model); }

View file

@ -1,4 +1,5 @@
#include "stdafx.h"
#include <Dwmapi.h>
#include "Renderer.h"
#include "DirectXTK/SpriteBatch.h"
#include "DirectXTK/SpriteFont.h"
@ -476,7 +477,7 @@ namespace NES
_spriteBatch->End();
// Present the information rendered to the back buffer to the front buffer (the screen)
_pSwapChain->Present(0, 0);
_pSwapChain->Present(EmulationSettings::CheckFlag(EmulationFlags::VerticalSync) ? 1 : 0, 0);
_frameLock.Release();
}