OpenGL is a platform-neutral library. It can run on operating systems such as X-Windows, the Macintosh, or Windows. In each of these systems you add a little extra code in order to interface your system to OpenGL.
The basic Win32 library includes a few built-in data types and functions to be used with OpenGL. Here's a block of code that shows how we initialize a window and update it. The data types PIXELFORMATDESCRIPTOR and HGLR are special built-in Windows types used for working with OpenGL. And ::ChoosePixelFormat, ::SelectPixelFormat, ::wglCreateContext, and ::SwapBuffers are built-in Windows methods for use with OpenGL.
PIXELFORMATDESCRIPTOR pixelformat; int pixelformat_index; HGLR openglrenderingcontext; HDC hdc_view; //Initialize the Window. pixelformatindex = ::ChoosePixelFormat(hdc, &pixelFormat); ::SelectPixelFormat(hdc, pixelformatindex, &pixelFormat); openglrenderingcontext = ::wglCreateContext(hdc_view); ::glMakeCurrent(hdc_view, openglrenderingcontext); /* Use ::gl... and ::glu... calls to set GL states, add GL vertices, load GL textures, //the example of a square was given in the previous subsection. */ //Update the Window ::glFinish() ::SwapBuffers(hdc_view);
Note that you don't need to re-initialize the window for every update. Each time you want to load the OpenGL state machine and send something new to the screen, it suffices to call ::glMakeCurrent again, using the same openglrenderingcontext. In the Pop Framework, the call to ::glMakeCurrent is encapsulated into our cGraphicsOpenGL::activate() method.