private MessageBox ( uint hwnd, string text, string caption, uint type ) : int | ||
hwnd | uint | |
text | string | |
caption | string | |
type | uint | |
return | int |
// ############################################################################ // ############################################################################ // ############################################################################ // ############################################################################ // ============================================================================ // The following can be used as an example of how to initialize OpenGL // rendering. A System.Windows.Forms object can use a window handle acquired // from (uint)((this.Handle).ToInt32()) as the "HWND" parameter. // // Here is a crude illustration of the use of WGL.DemoInitOpenGL() by a Form: // // // ---------------------------------------------------------------------- // public static uint m_uint_HWND = 0; // public static uint m_uint_DC = 0; // public static uint m_uint_RC = 0; // // protected override void OnPaintBackground( PaintEventArgs e ) // { // // This overrides the System.Windows.Forms.Control protected method // // "OnPaintBackground()" so that we don't clear the client area of // // this form window -- so the OpenGL doesn't flicker on each frame. // } // // protected override void OnPaint( System.Windows.Forms.PaintEventArgs e ) // { // if (0 == m_uint_RC) // { // m_uint_HWND = (uint)((this.Handle).ToInt32()); // WGL.DemoInitOpenGL( m_uint_HWND, ref m_uint_DC, ref m_uint_RC ); // } // if (0 != m_uint_RC) // { // WGL.DemoOpenGLDraw( this.Size.Width, this.Size.Height, m_uint_DC ); // } // System.Threading.Thread.Sleep( 10 ); // 10 msec --> 100 frames per second, max. // Invalidate(false); // Force OnPaint() to get called again. // } // // ---------------------------------------------------------------------- // // ============================================================================ public static void DemoInitOpenGL ( uint uint_HWND, // in ref uint ref_uint_DC, // out ref uint ref_uint_RC // out ) { ref_uint_DC = WGL.GetDC(uint_HWND); // CAUTION: Not doing the following WGL.wglSwapBuffers() on the DC will // result in a failure to subsequently create the RC. WGL.wglSwapBuffers(ref_uint_DC); WGL.DemoCreateRenderingContext(ref ref_uint_DC, ref ref_uint_RC); if (0 == ref_uint_RC) { WGL.MessageBox(0, "Failed to create OpenGL Rendering Context (RC)", "WGL.DemoInitOpenGL() : ERROR", MB_OK); return; } }
// DWORD GetLastError(VOID); // ############################################################################ // ############################################################################ // ############################################################################ // ############################################################################ // ============================================================================ // The following function, DemoCreateRenderingContext(ref_uint_DC,ref_uint_RC), // can be used as a simple way to create an OpenGL "Rendering Context" (RC). // **** DO NOT CALL DemoCreateRenderingContext() DIRECTLY IF YOU CHOOSE TO // CALL DemoInitOpenGL() (below) TO ESTABLISH OPENGL. **** // ============================================================================ public static unsafe void DemoCreateRenderingContext ( ref uint ref_uint_DC, ref uint ref_uint_RC ) { ref_uint_RC = 0; PIXELFORMATDESCRIPTOR pfd = new PIXELFORMATDESCRIPTOR(); // -------------------------------------------------------------------------- pfd.nSize = 40; // sizeof(PIXELFORMATDESCRIPTOR); pfd.nVersion = 1; pfd.dwFlags = (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER); pfd.iPixelType = (byte)(PFD_TYPE_RGBA); pfd.cColorBits = 32; pfd.cRedBits = 0; pfd.cRedShift = 0; pfd.cGreenBits = 0; pfd.cGreenShift = 0; pfd.cBlueBits = 0; pfd.cBlueShift = 0; pfd.cAlphaBits = 0; pfd.cAlphaShift = 0; pfd.cAccumBits = 0; pfd.cAccumRedBits = 0; pfd.cAccumGreenBits = 0; pfd.cAccumBlueBits = 0; pfd.cAccumAlphaBits = 0; pfd.cDepthBits = 32; pfd.cStencilBits = 0; pfd.cAuxBuffers = 0; pfd.iLayerType = (byte)(PFD_MAIN_PLANE); pfd.bReserved = 0; pfd.dwLayerMask = 0; pfd.dwVisibleMask = 0; pfd.dwDamageMask = 0; // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // Choose Pixel Format // -------------------------------------------------------------------------- int iPixelFormat = 0; PIXELFORMATDESCRIPTOR *_pfd = &pfd; iPixelFormat = WGL.ChoosePixelFormat(ref_uint_DC, _pfd); if (0 == iPixelFormat) { uint uint_LastError = WGL.GetLastError(); string string_Message = "ChoosePixelFormat() FAILED: Error: " + uint_LastError; WGL.MessageBox(0, string_Message, "WGL.DemoGetRenderingContext() : ERROR", MB_OK); return; } // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // Set Pixel Format // -------------------------------------------------------------------------- int int_Result_SPF = 0; int_Result_SPF = WGL.SetPixelFormat(ref_uint_DC, iPixelFormat, _pfd); if (0 == int_Result_SPF) { uint uint_LastError = WGL.GetLastError(); string string_Message = "SetPixelFormat() FAILED. Error: " + uint_LastError; WGL.MessageBox(0, string_Message, "WGL.DemoGetRenderingContext() : ERROR", MB_OK); return; } // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // Create Rendering Context (RC) // NOTE: You will get the following error: // 126 : ERROR_MOD_NOT_FOUND // if you attempt to create a render context too soon after creating a // window and getting its Device Context (DC). // See the comments for WGL.DemoInitOpenGL() on how to use a call to // WGL.wglSwapBuffers( ref_uint_DC ) before attempting to create the RC. // -------------------------------------------------------------------------- ref_uint_RC = WGL.wglCreateContext(ref_uint_DC); if (0 == ref_uint_RC) { uint uint_LastError = WGL.GetLastError(); string string_Message = "wglCreateContext() FAILED. Error: " + uint_LastError; WGL.MessageBox(0, string_Message, "WGL.DemoGetRenderingContext() : ERROR", MB_OK); return; } // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // Make the new Render Context (RC) the current Render Context (RC) // -------------------------------------------------------------------------- int int_Result_MC = 0; int_Result_MC = WGL.wglMakeCurrent(ref_uint_DC, ref_uint_RC); if (0 == int_Result_MC) { uint uint_LastError = WGL.GetLastError(); string string_Message = "wglMakeCurrent() FAILED. Error: " + uint_LastError; WGL.MessageBox(0, string_Message, "WGL.DemoGetRenderingContext() : ERROR", MB_OK); // *************************** WGL.wglDeleteContext(ref_uint_RC); ref_uint_RC = 0; // *************************** return; } // -------------------------------------------------------------------------- }