26.4 OpenGL code in Windows
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.
|