[OpenGL.Net] [c#] [ WinForm ] 建立與開啟視窗 - 紀錄

幾個備註:

  • 安裝 OpenGL.Net
  • 安裝 OpenGL.Net.WinForms
  • 建立一個 form 物件
  • 取得 form 視窗的 handler
  • 建立 OpenGL.Net.WinForms 的 GlControl 控件 (繪製在此處)
  • luca-piccioni/OpenGL.Net

static class Program
    {
        static void Main()
        {
            var form = new Form {Width = 1024, Height = 768};
            var hwnd = form.Handle;
            var glControl = new GlControl {Width = 800, Height = 600, Anchor = AnchorStyles.Top | AnchorStyles.Left};
            
            form.Controls.Add(glControl);

            form.Paint += new PaintEventHandler(RenderControl_Render);

            using (DeviceContext device = DeviceContext.Create(IntPtr.Zero, hwnd))
            {
                device.ChoosePixelFormat(new DevicePixelFormat(24));

                IntPtr ctx = device.CreateContext(IntPtr.Zero);
                if (device.MakeCurrent(ctx) == false)
                    throw new InvalidOperationException();
                // ...
            }

            Application.Run(form);
        }

        private static void RenderControl_Render(object sender, PaintEventArgs e)
        {
            Control senderControl = (Control) sender;
//            Gl.Viewport(-400, -300, senderControl.ClientSize.Width, senderControl.ClientSize.Height);
            Gl.MatrixMode(MatrixMode.Projection);
            Gl.LoadIdentity();
            Gl.Ortho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
            Gl.Clear(ClearBufferMask.ColorBufferBit);

            Gl.Begin(PrimitiveType.Triangles);
            Gl.Color3(1.0f, 0.0f, 0.0f);
            Gl.Vertex2(0.0f, 0.0f);
            Gl.Color3(0.0f, 1.0f, 0.0f);
            Gl.Vertex2(0.5f, 1.0f);
            Gl.Color3(0.0f, 0.0f, 1.0f);
            Gl.Vertex2(1.0f, 0.0f);
            Gl.End();
//            Gl.Flush();
        }
    }

留言