private void Render() { if (!this.IsVisible) { return; } // do lock to avoid resize/repaint race in control // where are BMP and GFX recreates // better practice is Monitor.TryEnter() pattern, but here we do it simpler lock (razorPainterWPFCtl1.RazorLock) { //if (visualization != null) // visualization.DrawFrame(razorPainterWPFCtl1.RazorGFX, razorPainterWPFCtl1.RazorWidth, razorPainterWPFCtl1.RazorHeight, frame); if (renderedframe != frame) { Visualization.DrawFrame(g, Buffer.Width, Buffer.Height, frame); g.Flush(); renderedframe = frame; } if (Visualization == null) { razorPainterWPFCtl1.RazorGFX.Clear(System.Drawing.SystemColors.Control); var nya = global::project.Properties.Resources.horo_vector_4_by_straywolf; razorPainterWPFCtl1.RazorGFX.DrawImage(nya, 0, razorPainterWPFCtl1.RazorHeight - (nya.Height * razorPainterWPFCtl1.RazorWidth / nya.Width), razorPainterWPFCtl1.RazorWidth, nya.Height * razorPainterWPFCtl1.RazorWidth / nya.Width); } else { razorPainterWPFCtl1.RazorGFX.DrawImageUnscaled(Buffer, 0, 0); } if ((Buffer.Width != razorPainterWPFCtl1.RazorWidth || Buffer.Height != razorPainterWPFCtl1.RazorHeight) && ( razorPainterWPFCtl1.RazorWidth > 0 && razorPainterWPFCtl1.RazorWidth < 10000 && razorPainterWPFCtl1.RazorHeight > 0 && razorPainterWPFCtl1.RazorHeight < 10000 )) { g.Dispose(); Buffer = new Bitmap((int)razorPainterWPFCtl1.RazorWidth, (int)razorPainterWPFCtl1.RazorHeight); g = Graphics.FromImage(Buffer); } razorPainterWPFCtl1.RazorGFX.DrawString(fps2.ToString(), font, System.Drawing.Brushes.Black, new PointF(0, 0)); razorPainterWPFCtl1.RazorPaint(); } fps++; }
public void SetTimeAndFrame(int time, float frame) { lock (razorPainterWPFCtl1.RazorLock) { if (visualization == null) { return; } if (time != this.time) { this.time = Math.Min(Visualization.BattleLength, time); Visualization.SetTime(time); } if (frame == this.frame) { return; } this.frame = frame; } }