From 278a9486b67335ce5835487ff81ddf81738fcbcd Mon Sep 17 00:00:00 2001 From: "andres.delikat" Date: Sat, 27 Aug 2011 21:31:47 +0000 Subject: [PATCH] NESPPU - speedups to palette viewer --- BizHawk.MultiClient/NEStools/NESPPU.cs | 7 +- BizHawk.MultiClient/NEStools/PaletteViewer.cs | 160 ++++++++++-------- 2 files changed, 95 insertions(+), 72 deletions(-) diff --git a/BizHawk.MultiClient/NEStools/NESPPU.cs b/BizHawk.MultiClient/NEStools/NESPPU.cs index 9245243529..29b6e341fc 100644 --- a/BizHawk.MultiClient/NEStools/NESPPU.cs +++ b/BizHawk.MultiClient/NEStools/NESPPU.cs @@ -70,10 +70,13 @@ namespace BizHawk.MultiClient //Pattern Viewer for (int x = 0; x < 16; x++) { + PaletteView.bgPalettesPrev[x] = new PaletteViewer.Palette(PaletteView.bgPalettes[x]); + PaletteView.spritePalettesPrev[x] = new PaletteViewer.Palette(PaletteView.spritePalettes[x]); PaletteView.bgPalettes[x].SetValue(Nes.LookupColor(Nes.ppu.PALRAM[PaletteView.bgPalettes[x].address])); PaletteView.spritePalettes[x].SetValue(Nes.LookupColor(Nes.ppu.PALRAM[PaletteView.spritePalettes[x].address])); } - PaletteView.Refresh(); + if (PaletteView.HasChanged()) + PaletteView.Refresh(); //Pattern Viewer int b0 = 0; @@ -116,7 +119,7 @@ namespace BizHawk.MultiClient } } PatternView.pattern.UnlockBits(bmpdata); - PatternView.Refresh(); + //PatternView.Refresh(); /* int SpriteNum, TileNum, Attr, MemAddr; diff --git a/BizHawk.MultiClient/NEStools/PaletteViewer.cs b/BizHawk.MultiClient/NEStools/PaletteViewer.cs index aff03191bc..41cfae1fbe 100644 --- a/BizHawk.MultiClient/NEStools/PaletteViewer.cs +++ b/BizHawk.MultiClient/NEStools/PaletteViewer.cs @@ -8,84 +8,104 @@ using System.Globalization; namespace BizHawk.MultiClient { - public class PaletteViewer : Control - { - public class Palette - { - public int address { get; set; } - private int value { get; set; } - private Color color; + public class PaletteViewer : Control + { + public class Palette + { + public int address { get; set; } + private int value { get; set; } + private Color color; - public Palette(int Address) - { - address = Address; - value = -1; - } + public Palette(int Address) + { + address = Address; + value = -1; + } - public int GetValue() - { - return value; - } + public Palette(Palette p) + { + address = p.address; + value = p.value; + color = p.color; + } - public void SetValue(int val) - { - unchecked - { + public int GetValue() + { + return value; + } + + public void SetValue(int val) + { + unchecked + { value = val; - } - color = Color.FromArgb(value); //TODO: value should be unprocessed! then do all calculations on this line - } + } + color = Color.FromArgb(value); //TODO: value should be unprocessed! then do all calculations on this line + } - public Color GetColor() - { - return color; - } - } + public Color GetColor() + { + return color; + } + } - public Palette[] bgPalettes = new Palette[16]; - public Palette[] spritePalettes = new Palette[16]; - - public PaletteViewer() - { - SetStyle(ControlStyles.AllPaintingInWmPaint, true); - SetStyle(ControlStyles.UserPaint, true); - SetStyle(ControlStyles.DoubleBuffer, true); - this.Size = new Size(128, 32); - this.BackColor = Color.White; - this.Paint += new System.Windows.Forms.PaintEventHandler(this.PaletteViewer_Paint); - this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PaletteViewer_KeyDown); + public Palette[] bgPalettes = new Palette[16]; + public Palette[] spritePalettes = new Palette[16]; - for (int x = 0; x < 16; x++) - { - bgPalettes[x] = new Palette(x); - spritePalettes[x] = new Palette(x+16); - } + public Palette[] bgPalettesPrev = new Palette[16]; + public Palette[] spritePalettesPrev = new Palette[16]; - } + public PaletteViewer() + { + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.UserPaint, true); + SetStyle(ControlStyles.DoubleBuffer, true); + this.Size = new Size(128, 32); + this.BackColor = Color.White; + this.Paint += new System.Windows.Forms.PaintEventHandler(this.PaletteViewer_Paint); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PaletteViewer_KeyDown); - private void PaletteViewer_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { } - - private void Display(Graphics g) - { - unchecked - { - Rectangle rect; - for (int x = 0; x < 16; x++) - { - rect = new Rectangle(new Point(x * 16, 1), new Size(16, 16)); - g.FillRectangle(new SolidBrush(bgPalettes[x].GetColor()), rect); - } - for (int x = 0; x < 16; x++) - { - rect = new Rectangle(new Point(x * 16, 17), new Size(16, 16)); - g.FillRectangle(new SolidBrush(spritePalettes[x].GetColor()), rect); - } - } - } + for (int x = 0; x < 16; x++) + { + bgPalettes[x] = new Palette(x); + spritePalettes[x] = new Palette(x + 16); + } - private void PaletteViewer_Paint(object sender, PaintEventArgs e) - { - Display(e.Graphics); - } - } + } + + private void PaletteViewer_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { } + + private void PaletteViewer_Paint(object sender, PaintEventArgs e) + { + unchecked + { + Rectangle rect; + for (int x = 0; x < 16; x++) + { + if (bgPalettes[x] != bgPalettesPrev[x]) + { + rect = new Rectangle(new Point(x * 16, 1), new Size(16, 16)); + e.Graphics.FillRectangle(new SolidBrush(bgPalettes[x].GetColor()), rect); + } + if (spritePalettes != spritePalettesPrev) + { + rect = new Rectangle(new Point(x * 16, 17), new Size(16, 16)); + e.Graphics.FillRectangle(new SolidBrush(spritePalettes[x].GetColor()), rect); + } + } + } + } + + public bool HasChanged() + { + for (int x = 0; x < 16; x++) + { + if (bgPalettes[x] != bgPalettesPrev[x]) + return true; + if (spritePalettes[x] != spritePalettesPrev[x]) + return true; + } + return false; + } + } }