saturn: hook up GL mode to user interface. in GL mode, one can choose resolutions like pcsx2: 1x, 2x, 3x, 4x, or user selected w*h

This commit is contained in:
goyuken 2013-05-14 03:06:37 +00:00
parent d3efbb6d3b
commit a754aba126
13 changed files with 662 additions and 69 deletions

View File

@ -49,7 +49,8 @@ namespace BizHawk.Emulation.Consoles.Sega.Saturn
/// <summary>
/// set video buffer
/// </summary>
/// <param name="buff">704x512x32bit, should persist over time</param>
/// <param name="buff">32 bit color, should persist over time. must hold at least 704*512px in software mode, or (704*n*512*n)px
/// in hardware mode with native factor size, or w*hpx in gl mode with explicit size</param>
[DllImport("libyabause.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void libyabause_setvidbuff(IntPtr buff);
@ -135,13 +136,21 @@ namespace BizHawk.Emulation.Consoles.Sega.Saturn
}
/// <summary>
/// only works in GL mode
/// set the overall resolution. only works in gl mode and when nativefactor = 0
/// </summary>
/// <param name="w">width</param>
/// <param name="h">height</param>
[DllImport("libyabause.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void libyabause_glresize(int w, int h);
/// <summary>
/// cause the overall resolution to automatically switch to a multiple of the original console resolution, as the original console resolution changes.
/// only applies in gl mode.
/// </summary>
/// <param name="n">factor, 1-4, 0 to disable.</param>
[DllImport("libyabause.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void libyabause_glsetnativefactor(int n);
/// <summary>
///
/// </summary>

View File

@ -35,16 +35,16 @@ namespace BizHawk.Emulation.Consoles.Sega.Saturn
LibYabause.CDInterface.ReadSectorFAD ReadSectorFADH;
LibYabause.CDInterface.ReadAheadFAD ReadAheadFADH;
public Yabause(CoreComm CoreComm, DiscSystem.Disc CD, byte[] bios)
public Yabause(CoreComm CoreComm, DiscSystem.Disc CD, byte[] bios, bool GL = false)
{
CoreComm.RomStatusDetails = "Yeh";
this.CoreComm = CoreComm;
this.CD = CD;
ResetFrameCounter();
Init(bios);
Init(bios, GL);
}
void Init(byte[] bios)
void Init(byte[] bios, bool GL = false)
{
if (AttachedCore != null)
{
@ -66,7 +66,7 @@ namespace BizHawk.Emulation.Consoles.Sega.Saturn
string BiosPipe = fp.GetPipeNameNative();
fp.Offer(bios);
if (!LibYabause.libyabause_init(ref CDInt, BiosPipe, false))
if (!LibYabause.libyabause_init(ref CDInt, BiosPipe, GL))
throw new Exception("libyabause_init() failed!");
var e = fp.GetResults();
@ -77,11 +77,13 @@ namespace BizHawk.Emulation.Consoles.Sega.Saturn
LibYabause.libyabause_setsndbuff(SoundHandle.AddrOfPinnedObject());
AttachedCore = this;
// with or without GL, this is the guaranteed frame -1 size.
// with or without GL, this is the guaranteed frame -1 size; (unless you do a gl resize)
BufferWidth = 320;
BufferHeight = 224;
InitMemoryDomains();
GLMode = GL;
}
public ControllerDefinition ControllerDefinition
@ -91,6 +93,42 @@ namespace BizHawk.Emulation.Consoles.Sega.Saturn
public IController Controller { get; set; }
public bool GLMode { get; private set; }
public void SetGLRes(int factor, int width, int height)
{
if (!GLMode)
return;
if (factor < 0) factor = 0;
if (factor > 4) factor = 4;
int maxwidth, maxheight;
if (factor == 0)
{
maxwidth = width;
maxheight = height;
}
else
{
maxwidth = 704 * factor;
maxheight = 512 * factor;
}
if (maxwidth * maxheight > VideoBuffer.Length)
{
VideoHandle.Free();
VideoBuffer = new int[maxwidth * maxheight];
VideoHandle = GCHandle.Alloc(VideoBuffer, GCHandleType.Pinned);
LibYabause.libyabause_setvidbuff(VideoHandle.AddrOfPinnedObject());
}
LibYabause.libyabause_glsetnativefactor(factor);
if (factor == 0)
LibYabause.libyabause_glresize(width, height);
}
public void FrameAdvance(bool render, bool rendersound = true)
{
int w, h, nsamp;

View File

@ -417,6 +417,12 @@
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SATTools\SaturnPrefs.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SATTools\SaturnPrefs.Designer.cs">
<DependentUpon>SaturnPrefs.cs</DependentUpon>
</Compile>
<Compile Include="SNESTools\SNESGameGenie.cs">
<SubType>Form</SubType>
</Compile>
@ -631,6 +637,9 @@
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="SATTools\SaturnPrefs.resx">
<DependentUpon>SaturnPrefs.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SMStools\SMSGraphicsConfig.resx">
<DependentUpon>SMSGraphicsConfig.cs</DependentUpon>
</EmbeddedResource>

View File

@ -577,6 +577,13 @@ namespace BizHawk.MultiClient
public bool SNES_ShowOBJ3 = true;
public bool SNES_ShowOBJ4 = true;
// SATURN GRAPHICS SETTINGS
public bool SaturnUseGL = false;
public int SaturnDispFactor = 1;
public bool SaturnDispFree = false;
public int SaturnGLW = 640;
public int SaturnGLH = 480;
// PCE Graphics settings
public bool PCEDispBG1 = true;
public bool PCEDispOBJ1 = true;

View File

@ -337,6 +337,8 @@
this.cmiScreenshotClipboard = new System.Windows.Forms.ToolStripMenuItem();
this.cmiCloseRom = new System.Windows.Forms.ToolStripMenuItem();
this.cmiShowMenu = new System.Windows.Forms.ToolStripMenuItem();
this.saturnToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.preferencesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
this.StatusSlot0.SuspendLayout();
this.contextMenuStrip1.SuspendLayout();
@ -361,6 +363,7 @@
this.sNESToolStripMenuItem,
this.colecoToolStripMenuItem,
this.n64ToolStripMenuItem,
this.saturnToolStripMenuItem,
this.helpToolStripMenuItem});
this.menuStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow;
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
@ -1319,7 +1322,7 @@
//
this.controllersToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.GameController;
this.controllersToolStripMenuItem.Name = "controllersToolStripMenuItem";
this.controllersToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.controllersToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.controllersToolStripMenuItem.Text = "&Controllers...";
this.controllersToolStripMenuItem.Click += new System.EventHandler(this.controllersToolStripMenuItem_Click);
//
@ -1327,7 +1330,7 @@
//
this.hotkeysToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.HotKeys;
this.hotkeysToolStripMenuItem.Name = "hotkeysToolStripMenuItem";
this.hotkeysToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.hotkeysToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.hotkeysToolStripMenuItem.Text = "&Hotkeys...";
this.hotkeysToolStripMenuItem.Click += new System.EventHandler(this.hotkeysToolStripMenuItem_Click);
//
@ -1335,7 +1338,7 @@
//
this.messagesToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.MessageConfig;
this.messagesToolStripMenuItem.Name = "messagesToolStripMenuItem";
this.messagesToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.messagesToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.messagesToolStripMenuItem.Text = "&Messages...";
this.messagesToolStripMenuItem.Click += new System.EventHandler(this.messagesToolStripMenuItem_Click);
//
@ -1343,7 +1346,7 @@
//
this.pathsToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.CopyFolderHS;
this.pathsToolStripMenuItem.Name = "pathsToolStripMenuItem";
this.pathsToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.pathsToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.pathsToolStripMenuItem.Text = "Paths...";
this.pathsToolStripMenuItem.Click += new System.EventHandler(this.pathsToolStripMenuItem_Click);
//
@ -1351,7 +1354,7 @@
//
this.soundToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.AudioHS;
this.soundToolStripMenuItem.Name = "soundToolStripMenuItem";
this.soundToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.soundToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.soundToolStripMenuItem.Text = "&Sound...";
this.soundToolStripMenuItem.Click += new System.EventHandler(this.soundToolStripMenuItem_Click);
//
@ -1359,14 +1362,14 @@
//
this.autofireToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Lightning;
this.autofireToolStripMenuItem.Name = "autofireToolStripMenuItem";
this.autofireToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.autofireToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.autofireToolStripMenuItem.Text = "&Autofire...";
this.autofireToolStripMenuItem.Click += new System.EventHandler(this.autofireToolStripMenuItem_Click);
//
// toolStripSeparator9
//
this.toolStripSeparator9.Name = "toolStripSeparator9";
this.toolStripSeparator9.Size = new System.Drawing.Size(149, 6);
this.toolStripSeparator9.Size = new System.Drawing.Size(147, 6);
//
// enableToolStripMenuItem
//
@ -1379,7 +1382,7 @@
this.frameAdvanceSkipLagFramesToolStripMenuItem,
this.backupSaveramToolStripMenuItem});
this.enableToolStripMenuItem.Name = "enableToolStripMenuItem";
this.enableToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.enableToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.enableToolStripMenuItem.Text = "&Enable";
this.enableToolStripMenuItem.DropDownOpened += new System.EventHandler(this.enableToolStripMenuItem_DropDownOpened);
//
@ -1450,7 +1453,7 @@
this.toolStripSeparator23,
this.logWindowAsConsoleToolStripMenuItem});
this.gUIToolStripMenuItem.Name = "gUIToolStripMenuItem";
this.gUIToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.gUIToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.gUIToolStripMenuItem.Text = "GUI";
this.gUIToolStripMenuItem.DropDownOpened += new System.EventHandler(this.gUIToolStripMenuItem_DropDownOpened);
//
@ -1575,7 +1578,7 @@
this.miSpeed150,
this.miSpeed200});
this.frameSkipToolStripMenuItem.Name = "frameSkipToolStripMenuItem";
this.frameSkipToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.frameSkipToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.frameSkipToolStripMenuItem.Text = "Speed/Skip";
this.frameSkipToolStripMenuItem.DropDownOpened += new System.EventHandler(this.frameSkipToolStripMenuItem_DropDownOpened);
//
@ -1742,7 +1745,7 @@
this.inputOverridesHotkeysToolStripMenuItem,
this.hotkeysOverrideInputToolStripMenuItem});
this.keyPriorityToolStripMenuItem.Name = "keyPriorityToolStripMenuItem";
this.keyPriorityToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.keyPriorityToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.keyPriorityToolStripMenuItem.Text = "Key Priority";
this.keyPriorityToolStripMenuItem.DropDownOpened += new System.EventHandler(this.keyPriorityToolStripMenuItem_DropDownOpened);
//
@ -1774,41 +1777,41 @@
this.binaryToolStripMenuItem,
this.textToolStripMenuItem});
this.savestateTypeToolStripMenuItem.Name = "savestateTypeToolStripMenuItem";
this.savestateTypeToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.savestateTypeToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.savestateTypeToolStripMenuItem.Text = "Savestate Type";
this.savestateTypeToolStripMenuItem.DropDownOpened += new System.EventHandler(this.savestateTypeToolStripMenuItem_DropDownOpened);
//
// defaultToolStripMenuItem
//
this.defaultToolStripMenuItem.Name = "defaultToolStripMenuItem";
this.defaultToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.defaultToolStripMenuItem.Size = new System.Drawing.Size(109, 22);
this.defaultToolStripMenuItem.Text = "Default";
this.defaultToolStripMenuItem.Click += new System.EventHandler(this.defaultToolStripMenuItem_Click);
//
// binaryToolStripMenuItem
//
this.binaryToolStripMenuItem.Name = "binaryToolStripMenuItem";
this.binaryToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.binaryToolStripMenuItem.Size = new System.Drawing.Size(109, 22);
this.binaryToolStripMenuItem.Text = "Binary";
this.binaryToolStripMenuItem.Click += new System.EventHandler(this.binaryToolStripMenuItem_Click);
//
// textToolStripMenuItem
//
this.textToolStripMenuItem.Name = "textToolStripMenuItem";
this.textToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.textToolStripMenuItem.Size = new System.Drawing.Size(109, 22);
this.textToolStripMenuItem.Text = "Text";
this.textToolStripMenuItem.Click += new System.EventHandler(this.textToolStripMenuItem_Click);
//
// toolStripSeparator10
//
this.toolStripSeparator10.Name = "toolStripSeparator10";
this.toolStripSeparator10.Size = new System.Drawing.Size(149, 6);
this.toolStripSeparator10.Size = new System.Drawing.Size(147, 6);
//
// saveConfigToolStripMenuItem
//
this.saveConfigToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Save;
this.saveConfigToolStripMenuItem.Name = "saveConfigToolStripMenuItem";
this.saveConfigToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.saveConfigToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.saveConfigToolStripMenuItem.Text = "Save Config";
this.saveConfigToolStripMenuItem.Click += new System.EventHandler(this.saveConfigToolStripMenuItem_Click);
//
@ -1816,7 +1819,7 @@
//
this.loadConfigToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.LoadConfig;
this.loadConfigToolStripMenuItem.Name = "loadConfigToolStripMenuItem";
this.loadConfigToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.loadConfigToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.loadConfigToolStripMenuItem.Text = "Load Config";
this.loadConfigToolStripMenuItem.Click += new System.EventHandler(this.loadConfigToolStripMenuItem_Click);
//
@ -2926,6 +2929,21 @@
this.cmiShowMenu.Text = "Show Menu";
this.cmiShowMenu.Click += new System.EventHandler(this.showMenuToolStripMenuItem_Click);
//
// saturnToolStripMenuItem
//
this.saturnToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.preferencesToolStripMenuItem});
this.saturnToolStripMenuItem.Name = "saturnToolStripMenuItem";
this.saturnToolStripMenuItem.Size = new System.Drawing.Size(51, 17);
this.saturnToolStripMenuItem.Text = "Saturn";
//
// preferencesToolStripMenuItem
//
this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem";
this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.preferencesToolStripMenuItem.Text = "Preferences...";
this.preferencesToolStripMenuItem.Click += new System.EventHandler(this.preferencesToolStripMenuItem_Click);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F);
@ -3274,6 +3292,8 @@
private System.Windows.Forms.ToolStripMenuItem defaultToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem binaryToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem textToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem saturnToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem preferencesToolStripMenuItem;
}
}

View File

@ -1789,6 +1789,7 @@ namespace BizHawk.MultiClient
sNESToolStripMenuItem.Visible = false;
colecoToolStripMenuItem.Visible = false;
n64ToolStripMenuItem.Visible = false;
saturnToolStripMenuItem.Visible = false;
switch (system)
{
@ -1840,6 +1841,9 @@ namespace BizHawk.MultiClient
case "N64":
n64ToolStripMenuItem.Visible = true;
break;
case "SAT":
saturnToolStripMenuItem.Visible = true;
break;
}
}
@ -1881,6 +1885,26 @@ namespace BizHawk.MultiClient
NESSpeicalMenuAdd("Insert Coin 2", "VS Coin 2", "Coin 2 inserted.");
}
void SaturnSetPrefs(Emulation.Consoles.Sega.Saturn.Yabause e = null)
{
if (e == null)
e = Global.Emulator as Emulation.Consoles.Sega.Saturn.Yabause;
if (Global.Config.SaturnUseGL != e.GLMode)
{
// theoretically possible; not coded. meh.
FlagNeedsReboot();
return;
}
if (e.GLMode && Global.Config.SaturnUseGL)
{
if (Global.Config.SaturnDispFree)
e.SetGLRes(0, Global.Config.SaturnGLW, Global.Config.SaturnGLH);
else
e.SetGLRes(Global.Config.SaturnDispFactor, 0, 0);
}
}
void SyncControls()
{
if (Global.Game == null) return;
@ -2098,8 +2122,9 @@ namespace BizHawk.MultiClient
MessageBox.Show("Saturn BIOS not found. Please check firmware configurations.");
return false;
}
var saturn = new Emulation.Consoles.Sega.Saturn.Yabause(nextComm, disc, File.ReadAllBytes(biosPath));
var saturn = new Emulation.Consoles.Sega.Saturn.Yabause(nextComm, disc, File.ReadAllBytes(biosPath), Global.Config.SaturnUseGL);
nextEmulator = saturn;
SaturnSetPrefs(saturn);
}
break;
@ -5534,5 +5559,17 @@ namespace BizHawk.MultiClient
Global.Config.SaveStateType = Config.SaveStateTypeE.Text;
}
private void preferencesToolStripMenuItem_Click(object sender, EventArgs e)
{
using (var dlg = new SATTools.SaturnPrefs())
{
var result = dlg.ShowDialog(this);
if (result == System.Windows.Forms.DialogResult.OK)
{
SaturnSetPrefs();
}
}
}
}
}

View File

@ -0,0 +1,265 @@
namespace BizHawk.MultiClient.SATTools
{
partial class SaturnPrefs
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.radioButtonSoft = new System.Windows.Forms.RadioButton();
this.radioButtonGL = new System.Windows.Forms.RadioButton();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.radioButtonFactor = new System.Windows.Forms.RadioButton();
this.radioButtonFree = new System.Windows.Forms.RadioButton();
this.numericUpDownFactor = new System.Windows.Forms.NumericUpDown();
this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
this.numericUpDown2 = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.buttonOK = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownFactor)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Controls.Add(this.radioButtonGL);
this.groupBox1.Controls.Add(this.radioButtonSoft);
this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(111, 100);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Render Type";
//
// radioButtonSoft
//
this.radioButtonSoft.AutoSize = true;
this.radioButtonSoft.Location = new System.Drawing.Point(6, 19);
this.radioButtonSoft.Name = "radioButtonSoft";
this.radioButtonSoft.Size = new System.Drawing.Size(67, 17);
this.radioButtonSoft.TabIndex = 0;
this.radioButtonSoft.TabStop = true;
this.radioButtonSoft.Text = "Software";
this.radioButtonSoft.UseVisualStyleBackColor = true;
this.radioButtonSoft.CheckedChanged += new System.EventHandler(this.radioButtonSoft_CheckedChanged);
//
// radioButtonGL
//
this.radioButtonGL.AutoSize = true;
this.radioButtonGL.Location = new System.Drawing.Point(6, 42);
this.radioButtonGL.Name = "radioButtonGL";
this.radioButtonGL.Size = new System.Drawing.Size(68, 17);
this.radioButtonGL.TabIndex = 1;
this.radioButtonGL.TabStop = true;
this.radioButtonGL.Text = "Open GL";
this.radioButtonGL.UseVisualStyleBackColor = true;
//
// groupBox2
//
this.groupBox2.Controls.Add(this.label1);
this.groupBox2.Controls.Add(this.numericUpDown2);
this.groupBox2.Controls.Add(this.numericUpDown1);
this.groupBox2.Controls.Add(this.numericUpDownFactor);
this.groupBox2.Controls.Add(this.radioButtonFree);
this.groupBox2.Controls.Add(this.radioButtonFactor);
this.groupBox2.Location = new System.Drawing.Point(129, 12);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(254, 100);
this.groupBox2.TabIndex = 1;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Render Resolution";
//
// radioButtonFactor
//
this.radioButtonFactor.AutoSize = true;
this.radioButtonFactor.Location = new System.Drawing.Point(6, 19);
this.radioButtonFactor.Name = "radioButtonFactor";
this.radioButtonFactor.Size = new System.Drawing.Size(107, 17);
this.radioButtonFactor.TabIndex = 0;
this.radioButtonFactor.TabStop = true;
this.radioButtonFactor.Text = "Multiple of Native";
this.radioButtonFactor.UseVisualStyleBackColor = true;
this.radioButtonFactor.CheckedChanged += new System.EventHandler(this.radioButtonFactor_CheckedChanged);
//
// radioButtonFree
//
this.radioButtonFree.AutoSize = true;
this.radioButtonFree.Location = new System.Drawing.Point(6, 42);
this.radioButtonFree.Name = "radioButtonFree";
this.radioButtonFree.Size = new System.Drawing.Size(63, 17);
this.radioButtonFree.TabIndex = 1;
this.radioButtonFree.TabStop = true;
this.radioButtonFree.Text = "Specific";
this.radioButtonFree.UseVisualStyleBackColor = true;
//
// numericUpDownFactor
//
this.numericUpDownFactor.Location = new System.Drawing.Point(119, 19);
this.numericUpDownFactor.Maximum = new decimal(new int[] {
4,
0,
0,
0});
this.numericUpDownFactor.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.numericUpDownFactor.Name = "numericUpDownFactor";
this.numericUpDownFactor.Size = new System.Drawing.Size(64, 20);
this.numericUpDownFactor.TabIndex = 2;
this.numericUpDownFactor.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// numericUpDown1
//
this.numericUpDown1.Increment = new decimal(new int[] {
8,
0,
0,
0});
this.numericUpDown1.Location = new System.Drawing.Point(75, 42);
this.numericUpDown1.Maximum = new decimal(new int[] {
2048,
0,
0,
0});
this.numericUpDown1.Minimum = new decimal(new int[] {
320,
0,
0,
0});
this.numericUpDown1.Name = "numericUpDown1";
this.numericUpDown1.Size = new System.Drawing.Size(67, 20);
this.numericUpDown1.TabIndex = 3;
this.numericUpDown1.Value = new decimal(new int[] {
320,
0,
0,
0});
//
// numericUpDown2
//
this.numericUpDown2.Increment = new decimal(new int[] {
8,
0,
0,
0});
this.numericUpDown2.Location = new System.Drawing.Point(166, 42);
this.numericUpDown2.Maximum = new decimal(new int[] {
1024,
0,
0,
0});
this.numericUpDown2.Minimum = new decimal(new int[] {
224,
0,
0,
0});
this.numericUpDown2.Name = "numericUpDown2";
this.numericUpDown2.Size = new System.Drawing.Size(76, 20);
this.numericUpDown2.TabIndex = 4;
this.numericUpDown2.Value = new decimal(new int[] {
224,
0,
0,
0});
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(148, 49);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(14, 13);
this.label1.TabIndex = 5;
this.label1.Text = "X";
//
// buttonOK
//
this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.buttonOK.Location = new System.Drawing.Point(101, 118);
this.buttonOK.Name = "buttonOK";
this.buttonOK.Size = new System.Drawing.Size(75, 23);
this.buttonOK.TabIndex = 2;
this.buttonOK.Text = "OK";
this.buttonOK.UseVisualStyleBackColor = true;
this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
//
// buttonCancel
//
this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.buttonCancel.Location = new System.Drawing.Point(216, 118);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 3;
this.buttonCancel.Text = "Cancel";
this.buttonCancel.UseVisualStyleBackColor = true;
//
// SaturnPrefs
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(395, 273);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonOK);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.Name = "SaturnPrefs";
this.Text = "SaturnPrefs";
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownFactor)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.RadioButton radioButtonGL;
private System.Windows.Forms.RadioButton radioButtonSoft;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.NumericUpDown numericUpDown2;
private System.Windows.Forms.NumericUpDown numericUpDown1;
private System.Windows.Forms.NumericUpDown numericUpDownFactor;
private System.Windows.Forms.RadioButton radioButtonFree;
private System.Windows.Forms.RadioButton radioButtonFactor;
private System.Windows.Forms.Button buttonOK;
private System.Windows.Forms.Button buttonCancel;
}
}

View File

@ -0,0 +1,52 @@
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;
namespace BizHawk.MultiClient.SATTools
{
public partial class SaturnPrefs : Form
{
public SaturnPrefs()
{
InitializeComponent();
try
{
radioButtonGL.Checked = Global.Config.SaturnUseGL;
radioButtonSoft.Checked = !Global.Config.SaturnUseGL;
radioButtonFree.Checked = Global.Config.SaturnDispFree;
radioButtonFactor.Checked = !Global.Config.SaturnDispFree;
numericUpDownFactor.Value = Global.Config.SaturnDispFactor;
numericUpDown1.Value = Global.Config.SaturnGLW;
numericUpDown2.Value = Global.Config.SaturnGLH;
}
catch (ArgumentOutOfRangeException)
{
}
}
private void radioButtonSoft_CheckedChanged(object sender, EventArgs e)
{
groupBox2.Enabled = radioButtonGL.Checked;
}
private void radioButtonFactor_CheckedChanged(object sender, EventArgs e)
{
numericUpDownFactor.Enabled = radioButtonFactor.Checked;
numericUpDown1.Enabled = numericUpDown2.Enabled = radioButtonFree.Checked;
}
private void buttonOK_Click(object sender, EventArgs e)
{
Global.Config.SaturnUseGL = radioButtonGL.Checked;
Global.Config.SaturnDispFree = radioButtonFree.Checked;
Global.Config.SaturnDispFactor = (int)numericUpDownFactor.Value;
Global.Config.SaturnGLW = (int)numericUpDown1.Value;
Global.Config.SaturnGLH = (int)numericUpDown2.Value;
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -467,12 +467,39 @@ extern "C" __declspec(dllexport) void libyabause_setpads(u8 p11, u8 p12, u8 p21,
ctrl2->padbits[1] = p22;
}
int glnativefactor = 0;
extern "C" __declspec(dllexport) void libyabause_glresize(int w, int h)
{
if (usinggl)
if (usinggl && !glnativefactor)
VIDCore->Resize(w, h, 0);
}
extern "C" __declspec(dllexport) void libyabause_glsetnativefactor(int n)
{
if (!usinggl)
return;
if (n > 4)
n = 4;
if (n < 0)
n = 0;
glnativefactor = n;
if (n)
VIDCore->Resize(vdp2width_gl * n, vdp2height_gl * n, 0);
}
void (*vdp2hookfcn)(u16 v) = NULL;
void vdp2newhook(u16 v)
{
vdp2hookfcn(v);
if (glnativefactor)
{
if (glwidth != vdp2width_gl * glnativefactor || glheight != vdp2height_gl * glnativefactor)
VIDCore->Resize(vdp2width_gl * glnativefactor, vdp2height_gl * glnativefactor, 0);
}
}
extern "C" __declspec(dllexport) int libyabause_init(CDInterface *_CD, const char *biosfn, int usegl)
{
usinggl = usegl;
@ -514,6 +541,13 @@ extern "C" __declspec(dllexport) int libyabause_init(CDInterface *_CD, const cha
yinit.netlinksetting = NULL;
yinit.videoformattype = VIDEOFORMATTYPE_NTSC;
if (usegl && !vdp2hookfcn)
{
// hook vdp2setresolution
vdp2hookfcn = VIDOGL.Vdp2SetResolution;
VIDOGL.Vdp2SetResolution = vdp2newhook;
}
if (YabauseInit(&yinit) != 0)
return 0;

View File

@ -127,8 +127,8 @@ int vdp1cor=0;
int vdp1cog=0;
int vdp1cob=0;
static int vdp2width;
static int vdp2height;
int vdp2width_gl;
int vdp2height_gl;
static int nbg0priority=0;
static int nbg1priority=0;
static int nbg2priority=0;
@ -910,24 +910,24 @@ static void Vdp2GenerateWindowInfo(void)
{
// resize to fit resolusion
if( m_vWindinfo0_size != vdp2height )
if( m_vWindinfo0_size != vdp2height_gl )
{
if(m_vWindinfo0 != NULL) free(m_vWindinfo0);
m_vWindinfo0 = (vdp2WindowInfo*)malloc(sizeof(vdp2WindowInfo)*(vdp2height+8));
m_vWindinfo0 = (vdp2WindowInfo*)malloc(sizeof(vdp2WindowInfo)*(vdp2height_gl+8));
for( i=0; i<vdp2height; i++ )
for( i=0; i<vdp2height_gl; i++ )
{
m_vWindinfo0[i].WinShowLine = 1;
m_vWindinfo0[i].WinHStart = 0;
m_vWindinfo0[i].WinHEnd = 1024;
}
m_vWindinfo0_size = vdp2height;
m_vWindinfo0_size = vdp2height_gl;
m_b0WindowChg = 1;
}
HShift = 0;
if( vdp2width>=640 ) HShift = 0; else HShift = 1;
if( vdp2width_gl>=640 ) HShift = 0; else HShift = 1;
// Line Table mode
@ -940,7 +940,7 @@ static void Vdp2GenerateWindowInfo(void)
LineWinAddr = (u32)((( (Vdp2Regs->LWTA0.part.U & 0x07) << 15) | (Vdp2Regs->LWTA0.part.L >> 1) ) << 2);
_Ygl->win0_vertexcnt = 0;
for( v = 0; v < vdp2height; v++ )
for( v = 0; v < vdp2height_gl; v++ )
{
if( v < Vdp2Regs->WPSY0 || v > Vdp2Regs->WPEY0 )
{
@ -1016,7 +1016,7 @@ static void Vdp2GenerateWindowInfo(void)
m_b0WindowChg = 1;
}
for( v = 0; v < vdp2height; v++ )
for( v = 0; v < vdp2height_gl; v++ )
{
m_vWindinfo0[v].WinHStart = Vdp2Regs->WPSX0 >> HShift;
@ -1068,23 +1068,23 @@ static void Vdp2GenerateWindowInfo(void)
{
// resize to fit resolution
if( m_vWindinfo1_size != vdp2height )
if( m_vWindinfo1_size != vdp2height_gl )
{
if(m_vWindinfo1 != NULL) free(m_vWindinfo1);
m_vWindinfo1 = (vdp2WindowInfo*)malloc(sizeof(vdp2WindowInfo)*vdp2height);
m_vWindinfo1 = (vdp2WindowInfo*)malloc(sizeof(vdp2WindowInfo)*vdp2height_gl);
for( i=0; i<vdp2height; i++ )
for( i=0; i<vdp2height_gl; i++ )
{
m_vWindinfo1[i].WinShowLine = 1;
m_vWindinfo1[i].WinHStart = 0;
m_vWindinfo1[i].WinHEnd = 1024;
}
m_vWindinfo1_size = vdp2height;
m_vWindinfo1_size = vdp2height_gl;
m_b1WindowChg = 1;
}
if( vdp2width>=640 ) HShift = 0; else HShift = 1;
if( vdp2width_gl>=640 ) HShift = 0; else HShift = 1;
// LineTable mode
@ -1097,7 +1097,7 @@ static void Vdp2GenerateWindowInfo(void)
// start address for Window table
LineWinAddr = (u32)((( (Vdp2Regs->LWTA1.part.U & 0x07) << 15) | (Vdp2Regs->LWTA1.part.L >> 1) ) << 2);
for( v = 0; v < vdp2height; v++ )
for( v = 0; v < vdp2height_gl; v++ )
{
if( v < Vdp2Regs->WPSY1 || v > Vdp2Regs->WPEY1 )
{
@ -1169,7 +1169,7 @@ static void Vdp2GenerateWindowInfo(void)
m_b1WindowChg = 1;
}
for( v = 0; v < vdp2height; v++ )
for( v = 0; v < vdp2height_gl; v++ )
{
m_vWindinfo1[v].WinHStart = Vdp2Regs->WPSX1 >> HShift;
m_vWindinfo1[v].WinHEnd = Vdp2Regs->WPEX1 >> HShift;
@ -1326,7 +1326,7 @@ void Vdp2GenLineinfo( vdp2draw_struct *info )
if( VDPLINE_SX(info->islinescroll)) bound += 0x04;
if( VDPLINE_SZ(info->islinescroll)) bound += 0x04;
for( i = 0; i < vdp2height; i += info->lineinc )
for( i = 0; i < vdp2height_gl; i += info->lineinc )
{
index = 0;
if( VDPLINE_SX(info->islinescroll))
@ -1575,7 +1575,7 @@ static void Vdp2DrawPattern(vdp2draw_struct *info, YglTexture *texture)
// Screen culling
if( tile.vertices[0] >= vdp2width || tile.vertices[1] >= vdp2height || tile.vertices[2] < 0 || tile.vertices[5] < 0 )
if( tile.vertices[0] >= vdp2width_gl || tile.vertices[1] >= vdp2height_gl || tile.vertices[2] < 0 || tile.vertices[5] < 0 )
{
info->x += tile.w;
info->y += tile.h;
@ -1770,18 +1770,18 @@ static void Vdp2DrawMap(vdp2draw_struct *info, YglTexture *texture)
X = info->x;
info->patternpixelwh = 8 * info->patternwh;
info->draww = (int)((float)vdp2width / info->coordincx);
info->drawh = (int)((float)vdp2height / info->coordincy);
info->draww = (int)((float)vdp2width_gl / info->coordincx);
info->drawh = (int)((float)vdp2height_gl / info->coordincy);
i=0;
yy = info->y*info->coordincy;
while( yy < vdp2height )
while( yy < vdp2height_gl )
{
Y = info->y;
j=0;
info->x = X;
xx = info->x*info->coordincx;
while( xx < vdp2width )
while( xx < vdp2width_gl )
{
info->y = Y;
info->PlaneAddr(info, info->mapwh * i + j);
@ -1914,16 +1914,16 @@ static void FASTCALL Vdp2DrawRotation(vdp2draw_struct *info, vdp2rotationparamet
u32 LineColorRamAdress;
vdp2rotationparameter_struct *parameter;
if( vdp2height >= 448 ) vres = (vdp2height>>1); else vres = vdp2height;
if( vdp2width >= 640 ) hres = (vdp2width>>1); else hres = vdp2width;
if( vdp2height_gl >= 448 ) vres = (vdp2height_gl>>1); else vres = vdp2height_gl;
if( vdp2width_gl >= 640 ) hres = (vdp2width_gl>>1); else hres = vdp2width_gl;
info->vertices[0] = 0;
info->vertices[1] = 0;
info->vertices[2] = vdp2width;
info->vertices[2] = vdp2width_gl;
info->vertices[3] = 0;
info->vertices[4] = vdp2width;
info->vertices[5] = vdp2height;
info->vertices[4] = vdp2width_gl;
info->vertices[5] = vdp2height_gl;
info->vertices[6] = 0;
info->vertices[7] = vdp2height;
info->vertices[7] = vdp2height_gl;
cellw = info->cellw;
cellh = info->cellh;
info->cellw = hres;
@ -2168,8 +2168,8 @@ static void SetSaturnResolution(int width, int height)
{
YglChangeResolution(width, height);
vdp2width=width;
vdp2height=height;
vdp2width_gl=width;
vdp2height_gl=height;
}
//////////////////////////////////////////////////////////////////////////////
@ -2219,7 +2219,7 @@ void VIDOGLResize(unsigned int w, unsigned int h, int on)
glViewport(0, 0, w, h);
YglNeedToUpdateWindow();
SetSaturnResolution(vdp2width, vdp2height);
SetSaturnResolution(vdp2width_gl, vdp2height_gl);
}
@ -3066,7 +3066,7 @@ static void Vdp2DrawBackScreen(void)
if (Vdp2Regs->BKTAU & 0x8000)
{
for(y = 0; y < vdp2height; y++)
for(y = 0; y < vdp2height_gl; y++)
{
dot = T1ReadWord(Vdp2Ram, scrAddr);
scrAddr += 2;
@ -3076,7 +3076,7 @@ static void Vdp2DrawBackScreen(void)
lineColors[3*y+2] = (dot & 0x7C00) >> 7;
line[4*y+0] = 0;
line[4*y+1] = y;
line[4*y+2] = vdp2width;
line[4*y+2] = vdp2width_gl;
line[4*y+3] = y;
}
@ -3084,7 +3084,7 @@ static void Vdp2DrawBackScreen(void)
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(2, GL_INT, 0, line);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_LINES,0,vdp2height*2);
glDrawArrays(GL_LINES,0,vdp2height_gl*2);
glDisableClientState(GL_COLOR_ARRAY);
glColor3ub(0xFF, 0xFF, 0xFF);
}
@ -3096,12 +3096,12 @@ static void Vdp2DrawBackScreen(void)
line[0] = 0;
line[1] = 0;
line[2] = vdp2width;
line[2] = vdp2width_gl;
line[3] = 0;
line[4] = vdp2width;
line[5] = vdp2height;
line[4] = vdp2width_gl;
line[5] = vdp2height_gl;
line[6] = 0;
line[7] = vdp2height;
line[7] = vdp2height_gl;
glDisable(GL_TEXTURE_2D);
glVertexPointer(2, GL_INT, 0, line);
@ -3293,10 +3293,10 @@ static void Vdp2DrawNBG0(void)
}
yy = info.y;
while( yy < vdp2height )
while( yy < vdp2height_gl )
{
xx = info.x;
while( xx < vdp2width )
while( xx < vdp2width_gl )
{
info.vertices[0] = xx * info.coordincx;
info.vertices[1] = yy * info.coordincy;
@ -3461,10 +3461,10 @@ static void Vdp2DrawNBG1(void)
}
yy = info.y;
while( yy < vdp2height )
while( yy < vdp2height_gl )
{
xx = info.x;
while( xx < vdp2width )
while( xx < vdp2width_gl )
{
info.vertices[0] = xx * info.coordincx;
info.vertices[1] = yy * info.coordincy;

View File

@ -26,6 +26,8 @@
#define VIDCORE_OGL 1
extern int vdp2width_gl;
extern int vdp2height_gl;
extern VideoInterface_struct VIDOGL;
#endif