Only paint the screen when needed, which is once per frame, or when the OSD is invoked. Also when lua draws things. I think I invoked it in all the logical places but probably missed some things. The lua logic needs to be refactored anyway to have a paint method, and an onpaint event

This commit is contained in:
adelikat 2013-08-23 02:40:14 +00:00
parent 39ee86fa92
commit 36489ca95a
5 changed files with 2757 additions and 2709 deletions

View File

@ -391,16 +391,20 @@ namespace BizHawk.MultiClient
public void AddMessage(string message)
{
Global.DisplayManager.NeedsToPaint = true;
messages.Add(new UIMessage { Message = message, ExpireAt = DateTime.Now + TimeSpan.FromSeconds(2) });
}
public void AddGUIText(string message, int x, int y, bool alert, Color BackGround, Color ForeColor, int anchor)
{
Global.DisplayManager.NeedsToPaint = true;
GUITextList.Add(new UIDisplay { Message = message, X = x, Y = y, BackGround = BackGround, ForeColor = ForeColor, Alert = alert, Anchor = anchor });
}
public void ClearGUIText()
{
Global.DisplayManager.NeedsToPaint = true;
GUITextList.Clear();
}
@ -476,6 +480,8 @@ namespace BizHawk.MultiClient
public string MakeInputDisplay()
{
var blah = DateTime.Now.Ticks;
return blah.ToString();
StringBuilder s;
if (!Global.MovieSession.Movie.IsActive || Global.MovieSession.Movie.IsFinished)
{
@ -645,6 +651,7 @@ namespace BizHawk.MultiClient
readonly SwappableDisplaySurfaceSet sourceSurfaceSet = new SwappableDisplaySurfaceSet();
public bool NeedsToPaint { get; set; }
DisplaySurface luaEmuSurface = null;
public void PreFrameUpdateLuaSource()
@ -712,6 +719,8 @@ namespace BizHawk.MultiClient
if (filteredSurface != null)
filteredSurface.Dispose();
filteredSurface = null;
NeedsToPaint = false;
}
public bool Disposed { get; private set; }

View File

@ -886,11 +886,13 @@ namespace BizHawk.MultiClient
public void gui_drawString(object X, object Y, object message, object color = null, object fontsize = null, object fontfamily = null, object fontstyle = null)
{
Global.DisplayManager.NeedsToPaint = true;
gui_drawText(X, Y, message, color, fontsize, fontfamily, fontstyle);
}
public void gui_drawText(object X, object Y, object message, object color = null, object fontsize = null, object fontfamily = null, object fontstyle = null)
{
Global.DisplayManager.NeedsToPaint = true;
using (var g = GetGraphics())
{
try
@ -943,6 +945,7 @@ namespace BizHawk.MultiClient
public void gui_drawPixel(object X, object Y, object color = null)
{
Global.DisplayManager.NeedsToPaint = true;
using (var g = GetGraphics())
{
float x = LuaInt(X) + 0.1F;
@ -959,6 +962,7 @@ namespace BizHawk.MultiClient
public void gui_drawLine(object x1, object y1, object x2, object y2, object color = null)
{
Global.DisplayManager.NeedsToPaint = true;
using (var g = GetGraphics())
{
try
@ -974,6 +978,7 @@ namespace BizHawk.MultiClient
public void gui_drawEllipse(object X, object Y, object width, object height, object line, object background = null)
{
Global.DisplayManager.NeedsToPaint = true;
using (var g = GetGraphics())
{
try
@ -995,6 +1000,7 @@ namespace BizHawk.MultiClient
public void gui_drawPolygon(LuaTable points, object line, object background = null)
{
Global.DisplayManager.NeedsToPaint = true;
//this is a test
using (var g = GetGraphics())
{
@ -1038,6 +1044,7 @@ namespace BizHawk.MultiClient
public void gui_drawBezier(LuaTable points, object color)
{
Global.DisplayManager.NeedsToPaint = true;
using (var g = GetGraphics())
{
try
@ -1064,6 +1071,7 @@ namespace BizHawk.MultiClient
public void gui_drawPie(object X, object Y, object width, object height, object startangle, object sweepangle,
object line, object background = null)
{
Global.DisplayManager.NeedsToPaint = true;
using (var g = GetGraphics())
{
try
@ -1085,6 +1093,7 @@ namespace BizHawk.MultiClient
public void gui_drawIcon(object Path, object x, object y, object width = null, object height = null)
{
Global.DisplayManager.NeedsToPaint = true;
using (var g = GetGraphics())
{
try
@ -1110,6 +1119,7 @@ namespace BizHawk.MultiClient
public void gui_drawImage(object Path, object x, object y, object width = null, object height = null)
{
Global.DisplayManager.NeedsToPaint = true;
using (var g = GetGraphics())
{
try
@ -1132,6 +1142,7 @@ namespace BizHawk.MultiClient
public void gui_clearGraphics()
{
Global.DisplayManager.NeedsToPaint = true;
luaSurface.Clear();
}
@ -1146,6 +1157,7 @@ namespace BizHawk.MultiClient
public void emu_yield()
{
Global.DisplayManager.NeedsToPaint = true;
currThread.Yield(0);
}

View File

@ -382,6 +382,7 @@
this.menuStrip1.Text = "menuStrip1";
this.menuStrip1.MenuActivate += new System.EventHandler(this.menuStrip1_MenuActivate);
this.menuStrip1.MenuDeactivate += new System.EventHandler(this.menuStrip1_MenuDeactivate);
this.menuStrip1.Leave += new System.EventHandler(this.menuStrip1_Leave);
//
// fileToolStripMenuItem
//
@ -3042,6 +3043,8 @@
this.Deactivate += new System.EventHandler(this.MainForm_Deactivate);
this.Load += new System.EventHandler(this.MainForm_Load);
this.Shown += new System.EventHandler(this.MainForm_Shown);
this.Paint += new System.Windows.Forms.PaintEventHandler(this.MainForm_Paint);
this.Enter += new System.EventHandler(this.MainForm_Enter);
this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.MainForm_MouseClick);
this.Resize += new System.EventHandler(this.MainForm_Resize);
this.menuStrip1.ResumeLayout(false);

View File

@ -482,21 +482,25 @@ namespace BizHawk.MultiClient
private void displayFPSToolStripMenuItem_Click(object sender, EventArgs e)
{
Global.DisplayManager.NeedsToPaint = true;
ToggleFPS();
}
private void displayFrameCounterToolStripMenuItem_Click(object sender, EventArgs e)
{
Global.DisplayManager.NeedsToPaint = true;
ToggleFrameCounter();
}
private void displayInputToolStripMenuItem_Click(object sender, EventArgs e)
{
Global.DisplayManager.NeedsToPaint = true;
ToggleInputDisplay();
}
private void displayLagCounterToolStripMenuItem_Click(object sender, EventArgs e)
{
Global.DisplayManager.NeedsToPaint = true;
ToggleLagCounter();
}
@ -705,6 +709,7 @@ namespace BizHawk.MultiClient
private void displayRerecordCountToolStripMenuItem_Click(object sender, EventArgs e)
{
Global.DisplayManager.NeedsToPaint = true;
Global.Config.DisplayRerecordCount ^= true;
}
@ -1127,6 +1132,7 @@ namespace BizHawk.MultiClient
private void displaySubtitlesToolStripMenuItem_Click(object sender, EventArgs e)
{
Global.DisplayManager.NeedsToPaint = true;
Global.Config.DisplaySubtitles ^= true;
}
@ -1325,6 +1331,7 @@ namespace BizHawk.MultiClient
private void menuStrip1_MenuDeactivate(object sender, EventArgs e)
{
Global.DisplayManager.NeedsToPaint = true;
if (!wasPaused)
{
UnpauseEmulator();

View File

@ -622,7 +622,7 @@ namespace BizHawk.MultiClient
//if(!IsNullEmulator())
StepRunLoop_Throttle();
Render();
if (Global.DisplayManager.NeedsToPaint) { Render(); }
CheckMessages();
if (exit)
@ -2201,6 +2201,7 @@ namespace BizHawk.MultiClient
//=======================================
MemoryPulse.Pulse();
Global.Emulator.FrameAdvance(!throttle.skipnextframe || CurrAviWriter != null, !coreskipaudio);
Global.DisplayManager.NeedsToPaint = true;
MemoryPulse.Pulse();
//=======================================
@ -2483,6 +2484,7 @@ namespace BizHawk.MultiClient
public void LoadStateFile(string path, string name, bool fromLua = false)
{
Global.DisplayManager.NeedsToPaint = true;
// try to detect binary first
BinaryStateLoader bw = BinaryStateLoader.LoadAndDetect(path);
if (bw != null)
@ -4141,5 +4143,20 @@ namespace BizHawk.MultiClient
{
new FirmwaresConfig().Show();
}
private void menuStrip1_Leave(object sender, EventArgs e)
{
Global.DisplayManager.NeedsToPaint = true;
}
private void MainForm_Enter(object sender, EventArgs e)
{
Global.DisplayManager.NeedsToPaint = true;
}
private void MainForm_Paint(object sender, PaintEventArgs e)
{
Global.DisplayManager.NeedsToPaint = true;
}
}
}