private unsafe void RenderLoop() { int fps_count = 0; int fps_ticks = 0; int pre_ticks = Environment.TickCount & Int32.MaxValue; var updatearg = new GDIDeviceUpdateArgs(); while (true) { var cur_ticks = Environment.TickCount & Int32.MaxValue; if (cur_ticks - fps_ticks > 1000) { uiContext.Send(d => { if (ParentForm != null) ParentForm.Text = String.Format("FPS: {0}", fps_count); }, null); fps_count = 1; fps_ticks = cur_ticks; } else ++fps_count; lock (LockObj) { if (DeviceUpdate != null) { if (_clearbuf) MemSet._memset(DIB.ImageData, _clearcol, DIB.lpsize); DeviceUpdate(this, updatearg.Update(this, cur_ticks - pre_ticks)); pre_ticks = cur_ticks; } SetDIBitsToDevice(hDCRef, 0, 0, Width, Height, 0, 0, 0, Height, _DIB.ImageBits, ref _BI, 0); } Thread.Sleep(1); } }
public void ClearBuffer() { MemSet._memset(DIB.ImageData, _clearcol, DIB.lpsize); }