/// <summary> /// /// </summary> /// <param name="e"></param> protected override void OnSizeChanged(EventArgs e) { base.OnSizeChanged(e); int width = this.Width, height = this.Height; if (width > 0 && height > 0) { FBORenderContext renderContext = this.renderContext; if (renderContext != null) { renderContext.MakeCurrent(); renderContext.SetDimensions(width, height); OpenGL.Viewport(0, 0, width, height); if (this.designMode) { GLCanvasHelper.ResizeGL(width, height); } this.Invalidate(); } } }
protected override void OnPaint(PaintEventArgs e) { RenderContext renderContext = this.renderContext; if (renderContext == null) { base.OnPaint(e); return; } stopWatch.Restart(); // Make sure it's our instance of openSharpGL that's active. renderContext.MakeCurrent(); if (this.designMode) { // 天蓝色背景 OpenGL.ClearColor(0x87 / 255.0f, 0xce / 255.0f, 0xeb / 255.0f, 0xff / 255.0f); GLCanvasHelper.ResizeGL(this.Width, this.Height); GLCanvasHelper.DrawPyramid(); } else { // If there is a draw handler, then call it. DoOpenGLDraw(e); } // Blit our offscreen bitmap. Graphics graphics = e.Graphics; IntPtr deviceContext = graphics.GetHdc(); renderContext.Blit(deviceContext); graphics.ReleaseHdc(deviceContext); stopWatch.Stop(); this.FPS = 1000.0 / stopWatch.Elapsed.TotalMilliseconds; }
/// <summary> /// /// </summary> protected virtual void DesignModeRender() { // Sky blue fore background. //OpenGL.ClearColor(0x87 / 255.0f, 0xce / 255.0f, 0xeb / 255.0f, 0xff / 255.0f); OpenGL.ClearColor(0, 0, 0, 0); // Clear the color and depth buffer. OpenGL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT | OpenGL.GL_STENCIL_BUFFER_BIT); GLCanvasHelper.DrawClock(); OpenGL.DrawText(10, 10, Color.White, "Courier New",// "Courier New", 25.0f, this.GetType().FullName); if (this.RenderTrigger == RenderTrigger.TimerBased) { OpenGL.DrawText(10, this.Height - 20 - 1, Color.Red, "Courier New",// "Courier New", 20.0f, string.Format("FPS: {0}", this.FPS.ToShortString())); } }
/// <summary> /// /// </summary> protected virtual void CreateRenderContext() { // Initialises OpenGL. var renderContext = new FBORenderContext(); // Create the render context. renderContext.Create(Width, Height, 32, null); this.renderContext = renderContext; renderContext.MakeCurrent(); // Set the most basic OpenGL styles. OpenGL.ShadeModel(OpenGL.GL_SMOOTH); OpenGL.ClearDepth(1.0f); OpenGL.Enable(OpenGL.GL_DEPTH_TEST); OpenGL.DepthFunc(OpenGL.GL_LEQUAL); OpenGL.Hint(OpenGL.GL_PERSPECTIVE_CORRECTION_HINT, OpenGL.GL_NICEST); if (this.designMode) { GLCanvasHelper.ResizeGL(this.Width, this.Height); } }