gb gpu view: beautify and add scanline callback control

This commit is contained in:
goyuken 2012-11-06 17:54:04 +00:00
parent 4fa7112fab
commit ad3e1bff21
4 changed files with 342 additions and 108 deletions

View File

@ -162,6 +162,8 @@ namespace BizHawk.Emulation.Consoles.GB
if (IsLagFrame)
LagCount++;
if (endofframecallback != null)
endofframecallback(LibGambatte.gambatte_cpuread(GambatteState, 0xff40));
}
/// <summary>
@ -613,27 +615,36 @@ namespace BizHawk.Emulation.Consoles.GB
/// set up callback
/// </summary>
/// <param name="callback"></param>
/// <param name="line">scanline</param>
/// <param name="line">scanline. -1 = end of frame, -2 = RIGHT NOW</param>
public void SetScanlineCallback(ScanlineCallback callback, int line)
{
if (GambatteState == IntPtr.Zero)
// not sure how this is being reached. tried the debugger...
return;
if (callback == null)
endofframecallback = null;
if (callback == null || line == -1 || line == -2)
{
scanlinecb = null;
else if (line < 0 || line > 153)
throw new ArgumentOutOfRangeException("line must be in [0, 153]");
else
LibGambatte.gambatte_setscanlinecallback(GambatteState, null, 0);
if (line == -1)
endofframecallback = callback;
else if (line == -2)
callback(LibGambatte.gambatte_cpuread(GambatteState, 0xff40));
}
else if (line >= 0 && line <= 153)
{
scanlinecb = delegate()
{
callback(LibGambatte.gambatte_cpuread(GambatteState, 0xff40));
//callback(0);
};
LibGambatte.gambatte_setscanlinecallback(GambatteState, scanlinecb, 0);
LibGambatte.gambatte_setscanlinecallback(GambatteState, scanlinecb, line);
}
else
throw new ArgumentOutOfRangeException("line must be in [0, 153]");
}
LibGambatte.ScanlineCallback scanlinecb;
ScanlineCallback endofframecallback;
#endregion

View File

@ -16,15 +16,24 @@ namespace BizHawk.MultiClient.GBtools
public BmpView()
{
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
this.BackColor = Color.Transparent;
this.Paint += new PaintEventHandler(BmpView_Paint);
this.SizeChanged += new EventHandler(BmpView_SizeChanged);
ChangeBitmapSize(1, 1);
if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv")
{
// in the designer
this.BackColor = Color.Black;
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
else
{
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
this.BackColor = Color.Transparent;
this.Paint += new PaintEventHandler(BmpView_Paint);
this.SizeChanged += new EventHandler(BmpView_SizeChanged);
ChangeBitmapSize(1, 1);
}
}
void BmpView_SizeChanged(object sender, EventArgs e)
@ -75,7 +84,7 @@ namespace BizHawk.MultiClient.GBtools
// kill unused props
[Browsable(false)]
public override Color BackColor { get { return base.BackColor; } set { base.BackColor = value; } }
public override Color BackColor { get { return base.BackColor; } set { base.BackColor = Color.Black; } }
[Browsable(false)]
public override string Text { get { return base.Text; } set { base.Text = value; } }
}

View File

@ -34,166 +34,300 @@
this.label4 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.bmpViewSPPal = new BizHawk.MultiClient.GBtools.BmpView();
this.bmpViewBGPal = new BizHawk.MultiClient.GBtools.BmpView();
this.bmpViewTiles2 = new BizHawk.MultiClient.GBtools.BmpView();
this.bmpViewTiles1 = new BizHawk.MultiClient.GBtools.BmpView();
this.bmpViewWin = new BizHawk.MultiClient.GBtools.BmpView();
this.bmpViewBG = new BizHawk.MultiClient.GBtools.BmpView();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.groupBox5 = new System.Windows.Forms.GroupBox();
this.radioButtonRefreshFrame = new System.Windows.Forms.RadioButton();
this.radioButtonRefreshScanline = new System.Windows.Forms.RadioButton();
this.radioButtonRefreshManual = new System.Windows.Forms.RadioButton();
this.buttonRefresh = new System.Windows.Forms.Button();
this.labelScanline = new System.Windows.Forms.Label();
this.hScrollBarScanline = new System.Windows.Forms.HScrollBar();
this.bmpViewOAM = new BizHawk.MultiClient.GBtools.BmpView();
this.label7 = new System.Windows.Forms.Label();
this.bmpViewBGPal = new BizHawk.MultiClient.GBtools.BmpView();
this.bmpViewSPPal = new BizHawk.MultiClient.GBtools.BmpView();
this.bmpViewTiles1 = new BizHawk.MultiClient.GBtools.BmpView();
this.bmpViewTiles2 = new BizHawk.MultiClient.GBtools.BmpView();
this.bmpViewBG = new BizHawk.MultiClient.GBtools.BmpView();
this.bmpViewWin = new BizHawk.MultiClient.GBtools.BmpView();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.groupBox3.SuspendLayout();
this.groupBox4.SuspendLayout();
this.groupBox5.SuspendLayout();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(9, 9);
this.label1.Location = new System.Drawing.Point(3, 16);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(22, 13);
this.label1.Size = new System.Drawing.Size(65, 13);
this.label1.TabIndex = 2;
this.label1.Text = "BG";
this.label1.Text = "Background";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(271, 9);
this.label2.Location = new System.Drawing.Point(265, 16);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(26, 13);
this.label2.Size = new System.Drawing.Size(46, 13);
this.label2.TabIndex = 3;
this.label2.Text = "Win";
this.label2.Text = "Window";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(533, 9);
this.label3.Location = new System.Drawing.Point(3, 16);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(38, 13);
this.label3.Size = new System.Drawing.Size(41, 13);
this.label3.TabIndex = 8;
this.label3.Text = "Tiles 1";
this.label3.Text = "Bank 1";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(667, 9);
this.label4.Location = new System.Drawing.Point(137, 16);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(69, 13);
this.label4.Size = new System.Drawing.Size(72, 13);
this.label4.TabIndex = 9;
this.label4.Text = "Tiles 2 (CGB)";
this.label4.Text = "Bank 2 (CGB)";
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(533, 220);
this.label5.Location = new System.Drawing.Point(3, 16);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(63, 13);
this.label5.Size = new System.Drawing.Size(116, 13);
this.label5.TabIndex = 12;
this.label5.Text = "BG Palettes";
this.label5.Text = "Background && Window";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(667, 220);
this.label6.Location = new System.Drawing.Point(137, 16);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(72, 13);
this.label6.Size = new System.Drawing.Size(34, 13);
this.label6.TabIndex = 13;
this.label6.Text = "OAM Palettes";
this.label6.Text = "Sprite";
//
// bmpViewSPPal
// groupBox1
//
this.bmpViewSPPal.BackColor = System.Drawing.Color.Transparent;
this.bmpViewSPPal.Location = new System.Drawing.Point(670, 236);
this.bmpViewSPPal.Name = "bmpViewSPPal";
this.bmpViewSPPal.Size = new System.Drawing.Size(128, 64);
this.bmpViewSPPal.TabIndex = 11;
this.bmpViewSPPal.Text = "bmpView2";
this.groupBox1.Controls.Add(this.bmpViewBG);
this.groupBox1.Controls.Add(this.bmpViewWin);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(530, 294);
this.groupBox1.TabIndex = 16;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Tilemaps";
//
// groupBox2
//
this.groupBox2.Controls.Add(this.label3);
this.groupBox2.Controls.Add(this.bmpViewTiles1);
this.groupBox2.Controls.Add(this.bmpViewTiles2);
this.groupBox2.Controls.Add(this.label4);
this.groupBox2.Location = new System.Drawing.Point(548, 12);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(274, 230);
this.groupBox2.TabIndex = 17;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Tiles";
//
// groupBox3
//
this.groupBox3.Controls.Add(this.label5);
this.groupBox3.Controls.Add(this.bmpViewBGPal);
this.groupBox3.Controls.Add(this.bmpViewSPPal);
this.groupBox3.Controls.Add(this.label6);
this.groupBox3.Location = new System.Drawing.Point(548, 248);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(274, 102);
this.groupBox3.TabIndex = 18;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "Palettes";
//
// groupBox4
//
this.groupBox4.Controls.Add(this.bmpViewOAM);
this.groupBox4.Location = new System.Drawing.Point(12, 312);
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size(332, 41);
this.groupBox4.TabIndex = 19;
this.groupBox4.TabStop = false;
this.groupBox4.Text = "Sprites";
//
// groupBox5
//
this.groupBox5.Controls.Add(this.hScrollBarScanline);
this.groupBox5.Controls.Add(this.labelScanline);
this.groupBox5.Controls.Add(this.buttonRefresh);
this.groupBox5.Controls.Add(this.radioButtonRefreshManual);
this.groupBox5.Controls.Add(this.radioButtonRefreshScanline);
this.groupBox5.Controls.Add(this.radioButtonRefreshFrame);
this.groupBox5.Location = new System.Drawing.Point(548, 356);
this.groupBox5.Name = "groupBox5";
this.groupBox5.Size = new System.Drawing.Size(274, 94);
this.groupBox5.TabIndex = 20;
this.groupBox5.TabStop = false;
this.groupBox5.Text = "Refresh Control";
//
// radioButtonRefreshFrame
//
this.radioButtonRefreshFrame.AutoSize = true;
this.radioButtonRefreshFrame.Location = new System.Drawing.Point(7, 20);
this.radioButtonRefreshFrame.Name = "radioButtonRefreshFrame";
this.radioButtonRefreshFrame.Size = new System.Drawing.Size(54, 17);
this.radioButtonRefreshFrame.TabIndex = 0;
this.radioButtonRefreshFrame.TabStop = true;
this.radioButtonRefreshFrame.Text = "Frame";
this.radioButtonRefreshFrame.UseVisualStyleBackColor = true;
this.radioButtonRefreshFrame.CheckedChanged += new System.EventHandler(this.radioButtonRefreshFrame_CheckedChanged);
//
// radioButtonRefreshScanline
//
this.radioButtonRefreshScanline.AutoSize = true;
this.radioButtonRefreshScanline.Location = new System.Drawing.Point(7, 44);
this.radioButtonRefreshScanline.Name = "radioButtonRefreshScanline";
this.radioButtonRefreshScanline.Size = new System.Drawing.Size(66, 17);
this.radioButtonRefreshScanline.TabIndex = 1;
this.radioButtonRefreshScanline.TabStop = true;
this.radioButtonRefreshScanline.Text = "Scanline";
this.radioButtonRefreshScanline.UseVisualStyleBackColor = true;
this.radioButtonRefreshScanline.CheckedChanged += new System.EventHandler(this.radioButtonRefreshScanline_CheckedChanged);
//
// radioButtonRefreshManual
//
this.radioButtonRefreshManual.AutoSize = true;
this.radioButtonRefreshManual.Location = new System.Drawing.Point(7, 68);
this.radioButtonRefreshManual.Name = "radioButtonRefreshManual";
this.radioButtonRefreshManual.Size = new System.Drawing.Size(60, 17);
this.radioButtonRefreshManual.TabIndex = 2;
this.radioButtonRefreshManual.TabStop = true;
this.radioButtonRefreshManual.Text = "Manual";
this.radioButtonRefreshManual.UseVisualStyleBackColor = true;
this.radioButtonRefreshManual.CheckedChanged += new System.EventHandler(this.radioButtonRefreshManual_CheckedChanged);
//
// buttonRefresh
//
this.buttonRefresh.Location = new System.Drawing.Point(76, 65);
this.buttonRefresh.Name = "buttonRefresh";
this.buttonRefresh.Size = new System.Drawing.Size(80, 23);
this.buttonRefresh.TabIndex = 4;
this.buttonRefresh.Text = "Refresh Now";
this.buttonRefresh.UseVisualStyleBackColor = true;
this.buttonRefresh.Click += new System.EventHandler(this.buttonRefresh_Click);
//
// labelScanline
//
this.labelScanline.AutoSize = true;
this.labelScanline.Location = new System.Drawing.Point(159, 24);
this.labelScanline.Name = "labelScanline";
this.labelScanline.Size = new System.Drawing.Size(21, 13);
this.labelScanline.TabIndex = 5;
this.labelScanline.Text = "SS";
this.labelScanline.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// hScrollBarScanline
//
this.hScrollBarScanline.Location = new System.Drawing.Point(76, 45);
this.hScrollBarScanline.Maximum = 153;
this.hScrollBarScanline.Name = "hScrollBarScanline";
this.hScrollBarScanline.Size = new System.Drawing.Size(192, 16);
this.hScrollBarScanline.TabIndex = 21;
this.hScrollBarScanline.ValueChanged += new System.EventHandler(this.hScrollBarScanline_ValueChanged);
//
// bmpViewOAM
//
this.bmpViewOAM.BackColor = System.Drawing.Color.Black;
this.bmpViewOAM.Location = new System.Drawing.Point(6, 19);
this.bmpViewOAM.Name = "bmpViewOAM";
this.bmpViewOAM.Size = new System.Drawing.Size(320, 16);
this.bmpViewOAM.TabIndex = 14;
//
// bmpViewBGPal
//
this.bmpViewBGPal.BackColor = System.Drawing.Color.Transparent;
this.bmpViewBGPal.Location = new System.Drawing.Point(536, 236);
this.bmpViewBGPal.BackColor = System.Drawing.Color.Black;
this.bmpViewBGPal.Location = new System.Drawing.Point(6, 32);
this.bmpViewBGPal.Name = "bmpViewBGPal";
this.bmpViewBGPal.Size = new System.Drawing.Size(128, 64);
this.bmpViewBGPal.TabIndex = 10;
this.bmpViewBGPal.Text = "bmpView1";
//
// bmpViewTiles2
// bmpViewSPPal
//
this.bmpViewTiles2.BackColor = System.Drawing.Color.Transparent;
this.bmpViewTiles2.Location = new System.Drawing.Point(670, 25);
this.bmpViewTiles2.Name = "bmpViewTiles2";
this.bmpViewTiles2.Size = new System.Drawing.Size(128, 192);
this.bmpViewTiles2.TabIndex = 7;
this.bmpViewTiles2.Text = "bmpView2";
this.bmpViewSPPal.BackColor = System.Drawing.Color.Black;
this.bmpViewSPPal.Location = new System.Drawing.Point(140, 32);
this.bmpViewSPPal.Name = "bmpViewSPPal";
this.bmpViewSPPal.Size = new System.Drawing.Size(128, 64);
this.bmpViewSPPal.TabIndex = 11;
this.bmpViewSPPal.Text = "bmpView2";
//
// bmpViewTiles1
//
this.bmpViewTiles1.BackColor = System.Drawing.Color.Transparent;
this.bmpViewTiles1.Location = new System.Drawing.Point(536, 25);
this.bmpViewTiles1.BackColor = System.Drawing.Color.Black;
this.bmpViewTiles1.Location = new System.Drawing.Point(6, 32);
this.bmpViewTiles1.Name = "bmpViewTiles1";
this.bmpViewTiles1.Size = new System.Drawing.Size(128, 192);
this.bmpViewTiles1.TabIndex = 6;
this.bmpViewTiles1.Text = "bmpView1";
//
// bmpViewWin
// bmpViewTiles2
//
this.bmpViewWin.BackColor = System.Drawing.Color.Transparent;
this.bmpViewWin.Location = new System.Drawing.Point(274, 25);
this.bmpViewWin.Name = "bmpViewWin";
this.bmpViewWin.Size = new System.Drawing.Size(256, 256);
this.bmpViewWin.TabIndex = 5;
this.bmpViewWin.Text = "bmpView2";
this.bmpViewTiles2.BackColor = System.Drawing.Color.Black;
this.bmpViewTiles2.Location = new System.Drawing.Point(140, 32);
this.bmpViewTiles2.Name = "bmpViewTiles2";
this.bmpViewTiles2.Size = new System.Drawing.Size(128, 192);
this.bmpViewTiles2.TabIndex = 7;
this.bmpViewTiles2.Text = "bmpView2";
//
// bmpViewBG
//
this.bmpViewBG.BackColor = System.Drawing.Color.Transparent;
this.bmpViewBG.Location = new System.Drawing.Point(12, 25);
this.bmpViewBG.BackColor = System.Drawing.Color.Black;
this.bmpViewBG.Location = new System.Drawing.Point(6, 32);
this.bmpViewBG.Name = "bmpViewBG";
this.bmpViewBG.Size = new System.Drawing.Size(256, 256);
this.bmpViewBG.TabIndex = 4;
this.bmpViewBG.Text = "bmpView1";
//
// bmpViewOAM
// bmpViewWin
//
this.bmpViewOAM.BackColor = System.Drawing.Color.Transparent;
this.bmpViewOAM.Location = new System.Drawing.Point(12, 300);
this.bmpViewOAM.Name = "bmpViewOAM";
this.bmpViewOAM.Size = new System.Drawing.Size(320, 16);
this.bmpViewOAM.TabIndex = 14;
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(9, 284);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(31, 13);
this.label7.TabIndex = 15;
this.label7.Text = "OAM";
this.bmpViewWin.BackColor = System.Drawing.Color.Black;
this.bmpViewWin.Location = new System.Drawing.Point(268, 32);
this.bmpViewWin.Name = "bmpViewWin";
this.bmpViewWin.Size = new System.Drawing.Size(256, 256);
this.bmpViewWin.TabIndex = 5;
this.bmpViewWin.Text = "bmpView2";
//
// GBGPUView
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(951, 414);
this.Controls.Add(this.label7);
this.Controls.Add(this.bmpViewOAM);
this.Controls.Add(this.label6);
this.Controls.Add(this.label5);
this.Controls.Add(this.bmpViewSPPal);
this.Controls.Add(this.bmpViewBGPal);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.bmpViewTiles2);
this.Controls.Add(this.bmpViewTiles1);
this.Controls.Add(this.bmpViewWin);
this.Controls.Add(this.bmpViewBG);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.ClientSize = new System.Drawing.Size(903, 500);
this.Controls.Add(this.groupBox5);
this.Controls.Add(this.groupBox4);
this.Controls.Add(this.groupBox3);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.Name = "GBGPUView";
this.Text = "GB GPU Viewer";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.GBGPUView_FormClosed);
this.Load += new System.EventHandler(this.GBGPUView_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.groupBox3.ResumeLayout(false);
this.groupBox3.PerformLayout();
this.groupBox4.ResumeLayout(false);
this.groupBox5.ResumeLayout(false);
this.groupBox5.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
@ -212,6 +346,16 @@
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private BmpView bmpViewOAM;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.GroupBox groupBox4;
private System.Windows.Forms.GroupBox groupBox5;
private System.Windows.Forms.Label labelScanline;
private System.Windows.Forms.Button buttonRefresh;
private System.Windows.Forms.RadioButton radioButtonRefreshManual;
private System.Windows.Forms.RadioButton radioButtonRefreshScanline;
private System.Windows.Forms.RadioButton radioButtonRefreshFrame;
private System.Windows.Forms.HScrollBar hScrollBarScanline;
}
}

View File

@ -32,6 +32,10 @@ namespace BizHawk.MultiClient.GBtools
bmpViewBGPal.ChangeBitmapSize(8, 4);
bmpViewSPPal.ChangeBitmapSize(8, 4);
bmpViewOAM.ChangeBitmapSize(320, 16);
hScrollBarScanline.Value = 0;
hScrollBarScanline_ValueChanged(null, null); // not firing in this case??
radioButtonRefreshFrame.Checked = true;
}
public void Restart()
@ -67,6 +71,15 @@ namespace BizHawk.MultiClient.GBtools
}
}
/// <summary>
/// 0..153: scanline number. -1: frame. -2: manual
/// </summary>
int cbscanline;
/// <summary>
/// what was last passed to the emu core
/// </summary>
int cbscanline_emu = -4;
/// <summary>
/// put me in ToolsBefore
/// </summary>
@ -75,10 +88,27 @@ namespace BizHawk.MultiClient.GBtools
if (!this.IsHandleCreated || this.IsDisposed)
return;
if (gb != null)
if (this.Visible)
gb.SetScanlineCallback(ScanlineCallback, 0);
{
if (!this.Visible)
{
if (cbscanline_emu != -2)
{
cbscanline_emu = -2;
gb.SetScanlineCallback(null, 0);
}
}
else
gb.SetScanlineCallback(null, 0);
{
if (cbscanline != cbscanline_emu)
{
cbscanline_emu = cbscanline;
if (cbscanline == -2)
gb.SetScanlineCallback(null, 0);
else
gb.SetScanlineCallback(ScanlineCallback, cbscanline);
}
}
}
}
/// <summary>
@ -88,7 +118,7 @@ namespace BizHawk.MultiClient.GBtools
/// <param name="dest">top left origin on 32bit bitmap</param>
/// <param name="pitch">pitch of bitmap in 4 byte units</param>
/// <param name="pal">4 palette colors</param>
static unsafe void DrawTile(byte* tile, int* dest, int pitch, int *pal)
static unsafe void DrawTile(byte* tile, int* dest, int pitch, int* pal)
{
for (int y = 0; y < 8; y++)
{
@ -207,7 +237,7 @@ namespace BizHawk.MultiClient.GBtools
int* pal = (int*)_pal;
for (int ty = 0; ty < 32; ty++)
{
{
for (int tx = 0; tx < 32; tx++)
{
int tileindex = map[0];
@ -267,7 +297,7 @@ namespace BizHawk.MultiClient.GBtools
int* dest = (int*)lockdata.Scan0;
int pitch = lockdata.Stride / sizeof(int);
int* pal = (int*)_pal;
byte *oam = (byte*)_oam;
byte* oam = (byte*)_oam;
for (int s = 0; s < 40; s++)
{
@ -438,5 +468,45 @@ namespace BizHawk.MultiClient.GBtools
{
Restart();
}
private void radioButtonRefreshFrame_CheckedChanged(object sender, EventArgs e) { ComputeRefreshValues(); }
private void radioButtonRefreshScanline_CheckedChanged(object sender, EventArgs e) { ComputeRefreshValues(); }
private void radioButtonRefreshManual_CheckedChanged(object sender, EventArgs e) { ComputeRefreshValues(); }
void ComputeRefreshValues()
{
if (radioButtonRefreshFrame.Checked)
{
labelScanline.Enabled = false;
hScrollBarScanline.Enabled = false;
buttonRefresh.Enabled = false;
cbscanline = -1;
}
else if (radioButtonRefreshScanline.Checked)
{
labelScanline.Enabled = true;
hScrollBarScanline.Enabled = true;
buttonRefresh.Enabled = false;
cbscanline = (hScrollBarScanline.Value + 145) % 154;
}
else if (radioButtonRefreshManual.Checked)
{
labelScanline.Enabled = false;
hScrollBarScanline.Enabled = false;
buttonRefresh.Enabled = true;
cbscanline = -2;
}
}
private void buttonRefresh_Click(object sender, EventArgs e)
{
if (cbscanline == -2 && gb != null)
gb.SetScanlineCallback(ScanlineCallback, -2);
}
private void hScrollBarScanline_ValueChanged(object sender, EventArgs e)
{
labelScanline.Text = ((hScrollBarScanline.Value + 145) % 154).ToString();
}
}
}