198 lines
7.6 KiB
C#
198 lines
7.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
using BizHawk.Emulation.Cores.Sony.PSX;
|
|
using BizHawk.Client.Common;
|
|
|
|
namespace BizHawk.Client.EmuHawk
|
|
{
|
|
public partial class PSXOptions : Form
|
|
{
|
|
//backups of the labels for string replacing
|
|
string lblPixelPro_text, lblMednafen_text, lblTweakedMednafen_text;
|
|
|
|
public PSXOptions(Octoshock.Settings settings, Octoshock.SyncSettings syncSettings, OctoshockDll.eVidStandard vidStandard, Size currentVideoSize)
|
|
{
|
|
InitializeComponent();
|
|
_settings = settings;
|
|
_syncSettings = syncSettings;
|
|
_previewVideoStandard = vidStandard;
|
|
_previewVideoSize = currentVideoSize;
|
|
|
|
if (_previewVideoStandard == OctoshockDll.eVidStandard.NTSC)
|
|
lblNTSC.Font = new System.Drawing.Font(lblNTSC.Font, FontStyle.Bold);
|
|
else lblPAL.Font = new System.Drawing.Font(lblPAL.Font, FontStyle.Bold);
|
|
|
|
lblPixelPro_text = lblPixelPro.Text;
|
|
lblMednafen_text = lblMednafen.Text;
|
|
lblTweakedMednafen_text = lblTweakedMednafen.Text;
|
|
|
|
rbPixelPro.Checked = _settings.ResolutionMode == Octoshock.eResolutionMode.PixelPro;
|
|
rbDebugMode.Checked = _settings.ResolutionMode == Octoshock.eResolutionMode.Debug;
|
|
rbMednafenMode.Checked = _settings.ResolutionMode == Octoshock.eResolutionMode.Mednafen;
|
|
rbTweakedMednafenMode.Checked = _settings.ResolutionMode == Octoshock.eResolutionMode.TweakedMednafen;
|
|
rbClipNone.Checked = _settings.HorizontalClipping == Octoshock.eHorizontalClipping.None;
|
|
rbClipBasic.Checked = _settings.HorizontalClipping == Octoshock.eHorizontalClipping.Basic;
|
|
rbClipToFramebuffer.Checked = _settings.HorizontalClipping == Octoshock.eHorizontalClipping.Framebuffer;
|
|
|
|
cbLEC.Checked = _syncSettings.EnableLEC;
|
|
cbGpuLag.Checked = _settings.GPULag;
|
|
|
|
rbWeave.Checked = _settings.DeinterlaceMode == Octoshock.eDeinterlaceMode.Weave;
|
|
rbBob.Checked = _settings.DeinterlaceMode == Octoshock.eDeinterlaceMode.Bob;
|
|
rbBobOffset.Checked = _settings.DeinterlaceMode == Octoshock.eDeinterlaceMode.BobOffset;
|
|
|
|
NTSC_FirstLineNumeric.Value = _settings.ScanlineStart_NTSC;
|
|
NTSC_LastLineNumeric.Value = _settings.ScanlineEnd_NTSC;
|
|
PAL_FirstLineNumeric.Value = _settings.ScanlineStart_PAL;
|
|
PAL_LastLineNumeric.Value = _settings.ScanlineEnd_PAL;
|
|
}
|
|
|
|
Size _previewVideoSize;
|
|
OctoshockDll.eVidStandard _previewVideoStandard;
|
|
Octoshock.Settings _settings;
|
|
Octoshock.SyncSettings _syncSettings;
|
|
bool _dispSettingsSet = false;
|
|
|
|
private void btnNiceDisplayConfig_Click(object sender, EventArgs e)
|
|
{
|
|
_dispSettingsSet = true;
|
|
MessageBox.Show("Finetuned Display Options will take effect if you OK from PSX Options");
|
|
}
|
|
|
|
public static DialogResult DoSettingsDialog(IWin32Window owner)
|
|
{
|
|
var psx = ((Octoshock)Global.Emulator);
|
|
var s = psx.GetSettings();
|
|
var ss = psx.GetSyncSettings();
|
|
var vid = psx.SystemVidStandard;
|
|
var size = psx.CurrentVideoSize;
|
|
var dlg = new PSXOptions(s,ss,vid,size);
|
|
|
|
var result = dlg.ShowDialog(owner);
|
|
return result;
|
|
}
|
|
|
|
void SyncSettingsFromGui(Octoshock.Settings settings, Octoshock.SyncSettings syncSettings)
|
|
{
|
|
if (rbPixelPro.Checked) settings.ResolutionMode = Octoshock.eResolutionMode.PixelPro;
|
|
if (rbDebugMode.Checked) settings.ResolutionMode = Octoshock.eResolutionMode.Debug;
|
|
if (rbMednafenMode.Checked) settings.ResolutionMode = Octoshock.eResolutionMode.Mednafen;
|
|
if (rbTweakedMednafenMode.Checked) settings.ResolutionMode = Octoshock.eResolutionMode.TweakedMednafen;
|
|
|
|
if (rbClipNone.Checked) settings.HorizontalClipping = Octoshock.eHorizontalClipping.None;
|
|
if (rbClipBasic.Checked) settings.HorizontalClipping = Octoshock.eHorizontalClipping.Basic;
|
|
if (rbClipToFramebuffer.Checked) settings.HorizontalClipping = Octoshock.eHorizontalClipping.Framebuffer;
|
|
|
|
if(rbWeave.Checked) _settings.DeinterlaceMode = Octoshock.eDeinterlaceMode.Weave;
|
|
if(rbBob.Checked) _settings.DeinterlaceMode = Octoshock.eDeinterlaceMode.Bob;
|
|
if(rbBobOffset.Checked) _settings.DeinterlaceMode = Octoshock.eDeinterlaceMode.BobOffset;
|
|
|
|
settings.ScanlineStart_NTSC = (int)NTSC_FirstLineNumeric.Value;
|
|
settings.ScanlineEnd_NTSC = (int)NTSC_LastLineNumeric.Value;
|
|
settings.ScanlineStart_PAL = (int)PAL_FirstLineNumeric.Value;
|
|
settings.ScanlineEnd_PAL = (int)PAL_LastLineNumeric.Value;
|
|
|
|
settings.GPULag = cbGpuLag.Checked;
|
|
|
|
syncSettings.EnableLEC = cbLEC.Checked;
|
|
}
|
|
|
|
private void btnOk_Click(object sender, EventArgs e)
|
|
{
|
|
if (_dispSettingsSet)
|
|
{
|
|
Global.Config.DispManagerAR = Config.EDispManagerAR.System;
|
|
Global.Config.DispFixAspectRatio = true;
|
|
Global.Config.DispFixScaleInteger = false;
|
|
Global.Config.DispFinalFilter = 1; //bilinear, I hope
|
|
}
|
|
|
|
SyncSettingsFromGui(_settings, _syncSettings);
|
|
_settings.Validate();
|
|
GlobalWin.MainForm.PutCoreSettings(_settings);
|
|
GlobalWin.MainForm.PutCoreSyncSettings(_syncSettings);
|
|
|
|
DialogResult = DialogResult.OK;
|
|
Close();
|
|
}
|
|
|
|
private void btnAreaFull_Click(object sender, EventArgs e)
|
|
{
|
|
NTSC_FirstLineNumeric.Value = 0;
|
|
NTSC_LastLineNumeric.Value = 239;
|
|
PAL_FirstLineNumeric.Value = 0;
|
|
PAL_LastLineNumeric.Value = 287;
|
|
SyncLabels();
|
|
}
|
|
|
|
void SyncLabels()
|
|
{
|
|
var temp = _settings.Clone();
|
|
var syncTemp = _syncSettings.Clone();
|
|
SyncSettingsFromGui(temp, syncTemp);
|
|
_settings.Validate();
|
|
|
|
//actually, I think this is irrelevant. But it's nice in case we want to do some kind of a more detailed simulation later
|
|
int w = _previewVideoSize.Width;
|
|
int h = _previewVideoSize.Height;
|
|
|
|
temp.ResolutionMode = Octoshock.eResolutionMode.PixelPro;
|
|
var ri = Octoshock.CalculateResolution(_previewVideoStandard, temp, w, h);
|
|
lblPixelPro.Text = lblPixelPro_text.Replace("800x480", string.Format("{0}x{1}", ri.Resolution.Width, ri.Resolution.Height)); ;
|
|
|
|
temp.ResolutionMode = Octoshock.eResolutionMode.Mednafen;
|
|
ri = Octoshock.CalculateResolution(_previewVideoStandard, temp, w, h);
|
|
lblMednafen.Text = lblMednafen_text.Replace("320x240", string.Format("{0}x{1}", ri.Resolution.Width, ri.Resolution.Height));
|
|
|
|
temp.ResolutionMode = Octoshock.eResolutionMode.TweakedMednafen;
|
|
ri = Octoshock.CalculateResolution(_previewVideoStandard, temp, w, h);
|
|
lblTweakedMednafen.Text = lblTweakedMednafen_text.Replace("400x300", string.Format("{0}x{1}", ri.Resolution.Width, ri.Resolution.Height));
|
|
}
|
|
|
|
private void DrawingArea_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
SyncLabels();
|
|
}
|
|
|
|
|
|
private void rbClipHorizontal_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
SyncLabels();
|
|
}
|
|
|
|
private void rbClipToFramebuffer_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
SyncLabels();
|
|
}
|
|
|
|
private void rbClipNone_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
SyncLabels();
|
|
}
|
|
|
|
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
MessageBox.Show(@"These options control BizHawk's Display Options to make it act quite a lot like Mednafen:
|
|
|
|
DispManagerAR = System (Use emulator-recommended AR)
|
|
DispFixAspectRatio = true (Maintain aspect ratio [letterbox main window as needed])
|
|
DispFinalFilter = bilinear (Like Mednafen)
|
|
DispFixScaleInteger = false (Generally unwanted with bilinear filtering)
|
|
|
|
This is a good place to write that Mednafen's default behaviour is fantastic for gaming!
|
|
But: 1. we think we improved on it a tiny bit with the tweaked mode
|
|
And: 2. It's not suitable for detailed scrutinizing of graphics
|
|
");
|
|
}
|
|
|
|
|
|
}
|
|
}
|