private void GdiRenderer_Paint(object sender, PaintEventArgs e) { if (DisplayBuffer == null) { DisplayBuffer = new Bitmap(Width, Height); } if ((!Model.DoRedraw && !Model.DoRevalue && !Model.DoResize) || Model.CurrentRoot == null) { e.Graphics.DrawImage(DisplayBuffer, 0, 0); Model.FpsCount++; return; } // background Graphics buffer = Graphics.FromImage(DisplayBuffer); buffer.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed; // todo option to turn this off buffer.Clear(Model.XColors.BackgroundColor); Debug.Assert(Model.CurrentRoot != Model.TopRoot); // current root should be intenalRoot in this case CurrentBuffer = buffer; Model.Render(); // Copy buffer to display e.Graphics.DrawImage(DisplayBuffer, 0, 0); Model.FpsCount++; Model.DoRedraw = false; Model.RedrawCount++; }
void GLRenderer_Paint(object sender, PaintEventArgs e) { if (!GLLoaded) { return; } GL.Clear(ClearBufferMask.ColorBufferBit); if (!Model.Paused) { // reset vertex buffers Nodes.Reset(); FontMap.Values.ForEach(f => f.ResetVBOs()); Outlines.Values.ForEach(v => v.Reset()); CallLines.Values.ForEach(v => v.Reset()); DashedCallLines.Values.ForEach(v => v.Reset()); Overlays.Reset(); // render Model.Render(); // send vertex buffers to gpu Nodes.Load(); FontMap.Values.ForEach(f => f.LoadVBOs()); Outlines.Values.Where(v => v.VertexCount > 0).ForEach(v => v.Load()); CallLines.Values.Where(v => v.VertexCount > 0).ForEach(v => v.Load()); DashedCallLines.Values.Where(v => v.VertexCount > 0).ForEach(v => v.Load()); Overlays.Load(); } // draw vertex buffers Nodes.Draw(BeginMode.Triangles); DrawLineVbo(Outlines); GLUtils.SafeEnable(LineCaps, () => { GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); DrawLineVbo(CallLines); GLUtils.SafeEnable(EnableCap.LineStipple, () => { //1111 1000 0000 0000 ushort pattern = (ushort)(0xF800 >> (XRay.DashOffset * 5)); GL.LineStipple(1, pattern); DrawLineVbo(DashedCallLines); }); }); GLUtils.SafeEnable(EnableCap.Blend, () => { GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); Overlays.Draw(BeginMode.Triangles); FontMap.Values.ForEach(f => f.DrawVBOs()); }); SwapBuffers(); Model.FpsCount++; }
void GLRenderer_Paint(object sender, PaintEventArgs e) { if (!GLLoaded) { return; } GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.MatrixMode(MatrixMode.Modelview); GL.LoadIdentity(); // Move the camera to our location in space FpsCam.SetupCamera(); if (!Model.Paused) { if (SelectionMode != SelectionModes.None) { DoSelectionPass(); } // reset vertex buffers Nodes.Reset(); FontMap.Values.ForEach(f => f.ResetVBOs()); Outlines.Values.ForEach(v => v.Reset()); CallLines.Values.ForEach(v => v.Reset()); DashedCallLines.Values.ForEach(v => v.Reset()); // render Model.Render(); // send vertex buffers to gpu Nodes.Load(); FontMap.Values.ForEach(f => f.LoadVBOs()); Outlines.Values.Where(v => v.VertexCount > 0).ForEach(v => v.Load()); CallLines.Values.Where(v => v.VertexCount > 0).ForEach(v => v.Load()); DashedCallLines.Values.Where(v => v.VertexCount > 0).ForEach(v => v.Load()); } // draw vertex buffers Nodes.Draw(BeginMode.Triangles); GLUtils.SafeEnable(LineCaps, () => { GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); DrawLineVbo(Outlines); DrawLineVbo(CallLines); GLUtils.SafeEnable(EnableCap.LineStipple, () => { //1111 1000 0000 0000 ushort pattern = (ushort)(0xF800 >> (XRay.DashOffset * 5)); GL.LineStipple(1, pattern); DrawLineVbo(DashedCallLines); }); }); GLUtils.SafeSaveMatrix(() => { GL.Rotate(90, 1.0f, 0.0f, 0.0f); FontMap.Values.ForEach(f => f.DrawVBOs()); }); if (MouseLook) { FpsCam.DrawHud(Width, Height, MidWindow, Color.Black); } SwapBuffers(); Model.FpsCount++; }