Emulation: Added adaptive sprite limit option to reduce graphical glitches when possible
This commit is contained in:
parent
c14f046990
commit
d05d66507c
12 changed files with 88 additions and 25 deletions
|
@ -59,6 +59,8 @@ enum EmulationFlags : uint64_t
|
|||
HidePauseOverlay = 0x20000000000,
|
||||
|
||||
UseCustomVsPalette = 0x40000000000,
|
||||
|
||||
AdaptiveSpriteLimit = 0x80000000000,
|
||||
|
||||
ForceMaxSpeed = 0x4000000000000000,
|
||||
ConsoleMode = 0x8000000000000000,
|
||||
|
|
39
Core/PPU.cpp
39
Core/PPU.cpp
|
@ -621,11 +621,40 @@ void PPU::LoadSprite(uint8_t spriteY, uint8_t tileIndex, uint8_t attributes, uin
|
|||
void PPU::LoadExtraSprites()
|
||||
{
|
||||
if(_spriteCount == 8 && EmulationSettings::CheckFlag(EmulationFlags::RemoveSpriteLimit)) {
|
||||
for(uint32_t i = _overflowSpriteAddr; i < 0x100; i += 4) {
|
||||
uint8_t spriteY = _spriteRAM[i];
|
||||
if(_scanline >= spriteY && _scanline < spriteY + (_flags.LargeSprites ? 16 : 8)) {
|
||||
LoadSprite(spriteY, _spriteRAM[i + 1], _spriteRAM[i + 2], _spriteRAM[i + 3], true);
|
||||
_spriteCount++;
|
||||
bool loadExtraSprites = true;
|
||||
|
||||
if(EmulationSettings::CheckFlag(EmulationFlags::AdaptiveSpriteLimit)) {
|
||||
bool lastSpritesIdentical = true;
|
||||
|
||||
uint16_t lastPosition = 0xFFFF;
|
||||
uint8_t identicalSpriteCount = 0;
|
||||
uint8_t maxIdenticalSpriteCount = 0;
|
||||
for(int i = 0; i < 64; i++) {
|
||||
uint8_t y = _spriteRAM[i << 2];
|
||||
if(_scanline >= y && _scanline < y + (_flags.LargeSprites ? 16 : 8)) {
|
||||
uint8_t x = _spriteRAM[(i << 2) + 3];
|
||||
uint16_t position = (y << 8) | x;
|
||||
if(lastPosition != position) {
|
||||
if(identicalSpriteCount > maxIdenticalSpriteCount) {
|
||||
maxIdenticalSpriteCount = identicalSpriteCount;
|
||||
}
|
||||
lastPosition = position;
|
||||
identicalSpriteCount = 1;
|
||||
} else {
|
||||
identicalSpriteCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
loadExtraSprites = identicalSpriteCount < 8 && maxIdenticalSpriteCount < 8;
|
||||
}
|
||||
|
||||
if(loadExtraSprites) {
|
||||
for(uint32_t i = _overflowSpriteAddr; i < 0x100; i += 4) {
|
||||
uint8_t spriteY = _spriteRAM[i];
|
||||
if(_scanline >= spriteY && _scanline < spriteY + (_flags.LargeSprites ? 16 : 8)) {
|
||||
LoadSprite(spriteY, _spriteRAM[i + 1], _spriteRAM[i + 2], _spriteRAM[i + 3], true);
|
||||
_spriteCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ namespace Mesen.GUI.Config
|
|||
{
|
||||
public bool AllowInvalidInput = false;
|
||||
public bool RemoveSpriteLimit = false;
|
||||
public bool AdaptiveSpriteLimit = true;
|
||||
public bool DisablePpu2004Reads = false;
|
||||
public bool DisablePaletteRead = false;
|
||||
public bool DisableOamAddrBug = false;
|
||||
|
@ -53,6 +54,7 @@ namespace Mesen.GUI.Config
|
|||
InteropEmu.SetFlag(EmulationFlags.Mmc3IrqAltBehavior, emulationInfo.UseAlternativeMmc3Irq);
|
||||
InteropEmu.SetFlag(EmulationFlags.AllowInvalidInput, emulationInfo.AllowInvalidInput);
|
||||
InteropEmu.SetFlag(EmulationFlags.RemoveSpriteLimit, emulationInfo.RemoveSpriteLimit);
|
||||
InteropEmu.SetFlag(EmulationFlags.AdaptiveSpriteLimit, emulationInfo.AdaptiveSpriteLimit);
|
||||
InteropEmu.SetFlag(EmulationFlags.ShowLagCounter, emulationInfo.ShowLagCounter);
|
||||
InteropEmu.SetFlag(EmulationFlags.DisablePpu2004Reads, emulationInfo.DisablePpu2004Reads);
|
||||
InteropEmu.SetFlag(EmulationFlags.DisablePaletteRead, emulationInfo.DisablePaletteRead);
|
||||
|
|
|
@ -302,6 +302,7 @@
|
|||
<Control ID="chkAllowInvalidInput">Permitir las entradas inválidas (Arriba+Abajo e Izquierda+Derecha al mismo tiempo)</Control>
|
||||
<Control ID="lblRamPowerOnState">Estado inicial de la memoria durante el inicio:</Control>
|
||||
<Control ID="chkRemoveSpriteLimit">Eliminar el límite de sprites (Reduce el parpadeo en algunos juegos)</Control>
|
||||
<Control ID="chkAdaptiveSpriteLimit">Automatically re-enable sprite limit as needed to prevent graphical glitches when possible</Control>
|
||||
<Control ID="chkEnableOamDecay">Activar la emulación de la degradación de la memoria OAM</Control>
|
||||
<Control ID="chkDisablePpu2004Reads">Impedir la reproducción del registro $2004 de la PPU (Famicom)</Control>
|
||||
<Control ID="chkDisableOamAddrBug">Desactivar la emulación de errores OAMADDR de la PPU</Control>
|
||||
|
|
|
@ -303,6 +303,7 @@
|
|||
<Control ID="chkUseAlternativeMmc3Irq">Utiliser la version alternative du comportement des IRQs du MMC3</Control>
|
||||
<Control ID="chkAllowInvalidInput">Permettre les entrées invalides (Bas+Haut ou Gauche+Droite en même temps)</Control>
|
||||
<Control ID="chkRemoveSpriteLimit">Éliminer la limite de sprites (Réduit le clignotement dans certains jeux)</Control>
|
||||
<Control ID="chkAdaptiveSpriteLimit">Automatiquement réactiver la limite de sprites au besoin pour réduire les problèmes graphiques</Control>
|
||||
<Control ID="chkEnableOamDecay">Activer l'émulation de la dégradation de la mémoire OAM</Control>
|
||||
<Control ID="chkDisablePpu2004Reads">Empêcher la lecture du registre $2004 du PPU (Famicom)</Control>
|
||||
<Control ID="chkDisableOamAddrBug">Désactiver l'émulation du bug de OAMADDR du PPU</Control>
|
||||
|
|
|
@ -303,6 +303,7 @@
|
|||
<Control ID="chkUseAlternativeMmc3Irq">MMC3AのIRQ仕様を使う</Control>
|
||||
<Control ID="chkAllowInvalidInput">コントローラでは不可能インプットを可能にする (同時に上と下や右と左)</Control>
|
||||
<Control ID="chkRemoveSpriteLimit">スプライトの制限を解除 (点滅を軽減する)</Control>
|
||||
<Control ID="chkAdaptiveSpriteLimit">必要な時だけにスプライトの制限を戻す(制限解除による映像バグの発生率を軽減する)</Control>
|
||||
<Control ID="chkEnableOamDecay">オブジェクト・アトリビュート・メモリーの崩壊現象を再現する</Control>
|
||||
<Control ID="chkDisablePpu2004Reads">PPUの$2004を読み込み不可能にする (ファミコン同様)</Control>
|
||||
<Control ID="chkDisableOamAddrBug">PPUのOAMADDRバグを無効にする</Control>
|
||||
|
|
|
@ -302,6 +302,7 @@
|
|||
<Control ID="chkAllowInvalidInput">Permitir as entradas inválidas (Cima+Baixo e Esquerda+Direita ao mesmo tempo)</Control>
|
||||
<Control ID="lblRamPowerOnState">Estado inicial da memória durante o início:</Control>
|
||||
<Control ID="chkRemoveSpriteLimit">Eliminar o limite de sprites (Reduz os "flashes" em alguns jogos)</Control>
|
||||
<Control ID="chkAdaptiveSpriteLimit">Automatically re-enable sprite limit as needed to prevent graphical glitches when possible</Control>
|
||||
<Control ID="chkEnableOamDecay">Enable OAM RAM decay</Control>
|
||||
<Control ID="chkDisablePpu2004Reads">Disable PPU $2004 reads (Famicom behavior)</Control>
|
||||
<Control ID="chkDisableOamAddrBug">Disable PPU OAMADDR bug emulation</Control>
|
||||
|
|
|
@ -304,6 +304,7 @@
|
|||
<Control ID="chkAllowInvalidInput">Разрешить недопустимые комбинации (Вниз+Вверх и Влево+Вправо)</Control>
|
||||
<Control ID="lblRamPowerOnState">Содержимое ОЗУ при включении : </Control>
|
||||
<Control ID="chkRemoveSpriteLimit">Отключить лимит спрайтов (уменьшает мерцание)</Control>
|
||||
<Control ID="chkAdaptiveSpriteLimit">Automatically re-enable sprite limit as needed to prevent graphical glitches when possible</Control>
|
||||
<Control ID="chkEnableOamDecay">Enable OAM RAM decay</Control>
|
||||
<Control ID="chkDisablePpu2004Reads">Disable PPU $2004 reads (Famicom behavior)</Control>
|
||||
<Control ID="chkDisableOamAddrBug">Disable PPU OAMADDR bug emulation</Control>
|
||||
|
|
|
@ -304,6 +304,7 @@
|
|||
<Control ID="chkAllowInvalidInput">Дозволити неприпустимі комбінації (Вниз+Вгору і Ліворуч+Вправо)</Control>
|
||||
<Control ID="lblRamPowerOnState">Вміст ОЗУ при включенні : </Control>
|
||||
<Control ID="chkRemoveSpriteLimit">Відключити ліміт спрайтів (зменшує мерехтіння)</Control>
|
||||
<Control ID="chkAdaptiveSpriteLimit">Automatically re-enable sprite limit as needed to prevent graphical glitches when possible</Control>
|
||||
<Control ID="chkEnableOamDecay">Enable OAM RAM decay</Control>
|
||||
<Control ID="chkDisablePpu2004Reads">Вiдключити читання PPU $2004 (Поведiнка Famicom)</Control>
|
||||
<Control ID="chkDisableOamAddrBug">Вiдключити PPU OAMADDR баг эмуляцiї</Control>
|
||||
|
|
56
GUI.NET/Forms/Config/frmEmulationConfig.Designer.cs
generated
56
GUI.NET/Forms/Config/frmEmulationConfig.Designer.cs
generated
|
@ -88,6 +88,7 @@ namespace Mesen.GUI.Forms.Config
|
|||
this.chkShowLagCounter = new System.Windows.Forms.CheckBox();
|
||||
this.btnResetLagCounter = new System.Windows.Forms.Button();
|
||||
this.tmrUpdateClockRate = new System.Windows.Forms.Timer(this.components);
|
||||
this.chkAdaptiveSpriteLimit = new System.Windows.Forms.CheckBox();
|
||||
this.tabMain.SuspendLayout();
|
||||
this.tpgGeneral.SuspendLayout();
|
||||
this.tableLayoutPanel4.SuspendLayout();
|
||||
|
@ -313,20 +314,22 @@ namespace Mesen.GUI.Forms.Config
|
|||
//
|
||||
this.tableLayoutPanel1.ColumnCount = 1;
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkEnableOamDecay, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkEnableOamDecay, 0, 4);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkRemoveSpriteLimit, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel8, 0, 9);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkDisablePaletteRead, 0, 7);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkDisableOamAddrBug, 0, 6);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkDisablePpuReset, 0, 4);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkDisablePpu2004Reads, 0, 5);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkUseNes101Hvc101Behavior, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkAllowInvalidInput, 0, 8);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkUseAlternativeMmc3Irq, 0, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel8, 0, 10);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkDisablePaletteRead, 0, 8);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkDisableOamAddrBug, 0, 7);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkDisablePpuReset, 0, 5);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkDisablePpu2004Reads, 0, 6);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkUseNes101Hvc101Behavior, 0, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkAllowInvalidInput, 0, 9);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkUseAlternativeMmc3Irq, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkAdaptiveSpriteLimit, 0, 1);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 11;
|
||||
this.tableLayoutPanel1.RowCount = 12;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
|
@ -338,7 +341,6 @@ namespace Mesen.GUI.Forms.Config
|
|||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(519, 296);
|
||||
this.tableLayoutPanel1.TabIndex = 0;
|
||||
//
|
||||
|
@ -346,7 +348,7 @@ namespace Mesen.GUI.Forms.Config
|
|||
//
|
||||
this.chkEnableOamDecay.AutoSize = true;
|
||||
this.chkEnableOamDecay.Checked = false;
|
||||
this.chkEnableOamDecay.Location = new System.Drawing.Point(0, 69);
|
||||
this.chkEnableOamDecay.Location = new System.Drawing.Point(0, 92);
|
||||
this.chkEnableOamDecay.Name = "chkEnableOamDecay";
|
||||
this.chkEnableOamDecay.Size = new System.Drawing.Size(243, 23);
|
||||
this.chkEnableOamDecay.TabIndex = 9;
|
||||
|
@ -361,13 +363,14 @@ namespace Mesen.GUI.Forms.Config
|
|||
this.chkRemoveSpriteLimit.TabIndex = 2;
|
||||
this.chkRemoveSpriteLimit.Text = "Remove sprite limit (Reduces flashing)";
|
||||
this.chkRemoveSpriteLimit.UseVisualStyleBackColor = true;
|
||||
this.chkRemoveSpriteLimit.CheckedChanged += new System.EventHandler(this.chkRemoveSpriteLimit_CheckedChanged);
|
||||
//
|
||||
// flowLayoutPanel8
|
||||
//
|
||||
this.flowLayoutPanel8.Controls.Add(this.lblRamPowerOnState);
|
||||
this.flowLayoutPanel8.Controls.Add(this.cboRamPowerOnState);
|
||||
this.flowLayoutPanel8.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.flowLayoutPanel8.Location = new System.Drawing.Point(0, 207);
|
||||
this.flowLayoutPanel8.Location = new System.Drawing.Point(0, 230);
|
||||
this.flowLayoutPanel8.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.flowLayoutPanel8.Name = "flowLayoutPanel8";
|
||||
this.flowLayoutPanel8.Size = new System.Drawing.Size(519, 27);
|
||||
|
@ -396,7 +399,7 @@ namespace Mesen.GUI.Forms.Config
|
|||
//
|
||||
this.chkDisablePaletteRead.AutoSize = true;
|
||||
this.chkDisablePaletteRead.Checked = false;
|
||||
this.chkDisablePaletteRead.Location = new System.Drawing.Point(0, 161);
|
||||
this.chkDisablePaletteRead.Location = new System.Drawing.Point(0, 184);
|
||||
this.chkDisablePaletteRead.Name = "chkDisablePaletteRead";
|
||||
this.chkDisablePaletteRead.Size = new System.Drawing.Size(248, 23);
|
||||
this.chkDisablePaletteRead.TabIndex = 6;
|
||||
|
@ -406,7 +409,7 @@ namespace Mesen.GUI.Forms.Config
|
|||
//
|
||||
this.chkDisableOamAddrBug.AutoSize = true;
|
||||
this.chkDisableOamAddrBug.Checked = false;
|
||||
this.chkDisableOamAddrBug.Location = new System.Drawing.Point(0, 138);
|
||||
this.chkDisableOamAddrBug.Location = new System.Drawing.Point(0, 161);
|
||||
this.chkDisableOamAddrBug.Name = "chkDisableOamAddrBug";
|
||||
this.chkDisableOamAddrBug.Size = new System.Drawing.Size(311, 23);
|
||||
this.chkDisableOamAddrBug.TabIndex = 5;
|
||||
|
@ -416,7 +419,7 @@ namespace Mesen.GUI.Forms.Config
|
|||
//
|
||||
this.chkDisablePpuReset.AutoSize = true;
|
||||
this.chkDisablePpuReset.Checked = false;
|
||||
this.chkDisablePpuReset.Location = new System.Drawing.Point(0, 92);
|
||||
this.chkDisablePpuReset.Location = new System.Drawing.Point(0, 115);
|
||||
this.chkDisablePpuReset.Name = "chkDisablePpuReset";
|
||||
this.chkDisablePpuReset.Size = new System.Drawing.Size(414, 23);
|
||||
this.chkDisablePpuReset.TabIndex = 7;
|
||||
|
@ -426,7 +429,7 @@ namespace Mesen.GUI.Forms.Config
|
|||
//
|
||||
this.chkDisablePpu2004Reads.AutoSize = true;
|
||||
this.chkDisablePpu2004Reads.Checked = false;
|
||||
this.chkDisablePpu2004Reads.Location = new System.Drawing.Point(0, 115);
|
||||
this.chkDisablePpu2004Reads.Location = new System.Drawing.Point(0, 138);
|
||||
this.chkDisablePpu2004Reads.Name = "chkDisablePpu2004Reads";
|
||||
this.chkDisablePpu2004Reads.Size = new System.Drawing.Size(341, 23);
|
||||
this.chkDisablePpu2004Reads.TabIndex = 4;
|
||||
|
@ -435,7 +438,7 @@ namespace Mesen.GUI.Forms.Config
|
|||
// chkUseNes101Hvc101Behavior
|
||||
//
|
||||
this.chkUseNes101Hvc101Behavior.AutoSize = true;
|
||||
this.chkUseNes101Hvc101Behavior.Location = new System.Drawing.Point(3, 26);
|
||||
this.chkUseNes101Hvc101Behavior.Location = new System.Drawing.Point(3, 49);
|
||||
this.chkUseNes101Hvc101Behavior.Name = "chkUseNes101Hvc101Behavior";
|
||||
this.chkUseNes101Hvc101Behavior.Size = new System.Drawing.Size(292, 17);
|
||||
this.chkUseNes101Hvc101Behavior.TabIndex = 8;
|
||||
|
@ -447,7 +450,7 @@ namespace Mesen.GUI.Forms.Config
|
|||
this.chkAllowInvalidInput.AutoSize = true;
|
||||
this.chkAllowInvalidInput.Checked = false;
|
||||
this.chkAllowInvalidInput.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.chkAllowInvalidInput.Location = new System.Drawing.Point(0, 184);
|
||||
this.chkAllowInvalidInput.Location = new System.Drawing.Point(0, 207);
|
||||
this.chkAllowInvalidInput.Name = "chkAllowInvalidInput";
|
||||
this.chkAllowInvalidInput.Size = new System.Drawing.Size(519, 23);
|
||||
this.chkAllowInvalidInput.TabIndex = 1;
|
||||
|
@ -456,7 +459,7 @@ namespace Mesen.GUI.Forms.Config
|
|||
// chkUseAlternativeMmc3Irq
|
||||
//
|
||||
this.chkUseAlternativeMmc3Irq.AutoSize = true;
|
||||
this.chkUseAlternativeMmc3Irq.Location = new System.Drawing.Point(3, 49);
|
||||
this.chkUseAlternativeMmc3Irq.Location = new System.Drawing.Point(3, 72);
|
||||
this.chkUseAlternativeMmc3Irq.Name = "chkUseAlternativeMmc3Irq";
|
||||
this.chkUseAlternativeMmc3Irq.Size = new System.Drawing.Size(197, 17);
|
||||
this.chkUseAlternativeMmc3Irq.TabIndex = 0;
|
||||
|
@ -824,6 +827,18 @@ namespace Mesen.GUI.Forms.Config
|
|||
this.tmrUpdateClockRate.Enabled = true;
|
||||
this.tmrUpdateClockRate.Tick += new System.EventHandler(this.tmrUpdateClockRate_Tick);
|
||||
//
|
||||
// chkAdaptiveSpriteLimit
|
||||
//
|
||||
this.chkAdaptiveSpriteLimit.AutoSize = true;
|
||||
this.chkAdaptiveSpriteLimit.Location = new System.Drawing.Point(18, 26);
|
||||
this.chkAdaptiveSpriteLimit.Margin = new System.Windows.Forms.Padding(18, 3, 3, 3);
|
||||
this.chkAdaptiveSpriteLimit.Name = "chkAdaptiveSpriteLimit";
|
||||
this.chkAdaptiveSpriteLimit.Size = new System.Drawing.Size(442, 17);
|
||||
this.chkAdaptiveSpriteLimit.TabIndex = 10;
|
||||
this.chkAdaptiveSpriteLimit.Text = "Automatically re-enable sprite limit as needed to prevent graphical glitches when" +
|
||||
" possible";
|
||||
this.chkAdaptiveSpriteLimit.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// frmEmulationConfig
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
|
@ -941,5 +956,6 @@ namespace Mesen.GUI.Forms.Config
|
|||
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel10;
|
||||
private System.Windows.Forms.NumericUpDown nudRewindSpeed;
|
||||
private System.Windows.Forms.Label lblRewindSpeedHint;
|
||||
private System.Windows.Forms.CheckBox chkAdaptiveSpriteLimit;
|
||||
}
|
||||
}
|
|
@ -28,6 +28,7 @@ namespace Mesen.GUI.Forms.Config
|
|||
AddBinding("UseAlternativeMmc3Irq", chkUseAlternativeMmc3Irq);
|
||||
AddBinding("AllowInvalidInput", chkAllowInvalidInput);
|
||||
AddBinding("RemoveSpriteLimit", chkRemoveSpriteLimit);
|
||||
AddBinding("AdaptiveSpriteLimit", chkAdaptiveSpriteLimit);
|
||||
AddBinding("DisablePpu2004Reads", chkDisablePpu2004Reads);
|
||||
AddBinding("DisablePaletteRead", chkDisablePaletteRead);
|
||||
AddBinding("DisableOamAddrBug", chkDisableOamAddrBug);
|
||||
|
@ -79,5 +80,10 @@ namespace Mesen.GUI.Forms.Config
|
|||
{
|
||||
InteropEmu.ResetLagCounter();
|
||||
}
|
||||
|
||||
private void chkRemoveSpriteLimit_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
chkAdaptiveSpriteLimit.Enabled = chkRemoveSpriteLimit.Checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1001,6 +1001,8 @@ namespace Mesen.GUI
|
|||
|
||||
UseCustomVsPalette = 0x40000000000,
|
||||
|
||||
AdaptiveSpriteLimit = 0x80000000000,
|
||||
|
||||
ForceMaxSpeed = 0x4000000000000000,
|
||||
ConsoleMode = 0x8000000000000000,
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue