/// <summary> /// OpenGLの初期設定を行います。 /// </summary> protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (IsDesignMode) { return; } GLWrap.Wrap(() => GL.Enable(EnableCap.Texture2D)); GLWrap.Wrap(() => GL.Enable(EnableCap.Blend)); GLWrap.Wrap(() => GL.Disable(EnableCap.Lighting)); GLWrap.Wrap(() => GL.Enable(EnableCap.CullFace)); GLWrap.Wrap(() => GL.CullFace(CullFaceMode.Back)); //GLWrap.Wrap(() => GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Fastest)); // 背景色の更新 BackColorChanged += OnBackColorChanged; GLElements .Where(_ => _ != null) .ForEach(_ => _.InitializeOpenGL(this)); this.glInitialized = true; // Viewportを更新しておきます。 UpdateViewport(); }
/// <summary> /// OpenGLのClearColorを更新します。 /// </summary> private void OnBackColorChanged(object sender, EventArgs e) { GLWrap.Wrap(() => GL.ClearColor( MathEx.Between(0.0f, 1.0f, BackColor.R / 255.0f), MathEx.Between(0.0f, 1.0f, BackColor.G / 255.0f), MathEx.Between(0.0f, 1.0f, BackColor.B / 255.0f), MathEx.Between(0.0f, 1.0f, BackColor.A / 255.0f))); }
/// <summary> /// 投影行列の更新を行います。 /// </summary> private void UpdateViewport() { if (IsDesignMode || Context == null) { return; } GLWrap.Wrap(() => GL.Viewport(0, 0, Width, Height)); GLWrap.Wrap(() => GL.MatrixMode(MatrixMode.Projection)); GLWrap.Wrap(() => GL.LoadIdentity()); GLWrap.Wrap(() => GL.Ortho(0, ScreenWidth, ScreenHeight, 0, -1000, +1000)); GLWrap.Wrap(() => GL.MatrixMode(MatrixMode.Modelview)); GLWrap.Wrap(() => GL.LoadIdentity()); }
/// <summary> /// 描画処理を行います。 /// </summary> public void DoRender() { if (IsDesignMode) { return; } MakeCurrent(); GLWrap.Wrap(() => GL.Clear(ClearBufferMask.ColorBufferBit)); GLWrap.Wrap(() => GL.LoadIdentity()); this.renderBuffer.Render(); GLElements .Where(_ => _ != null) .ForEach(_ => _.DoRender()); SwapBuffers(); }