예제 #1
0
        /// <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();
        }
예제 #2
0
 /// <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)));
 }
예제 #3
0
        /// <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());
        }
예제 #4
0
        /// <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();
        }