wglはOpenGL関数とWindowsAPIの両方を使えるようにする為のOpenGLが提供する機能です。
・実際にwglを使う
1.
OpenGLを表示するウインドウプロシージャ内にPIXELFORMATDESCRIPTOR構造体を宣言し、
以下のように値を設定します。
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
1, // version number
PFD_DRAW_TO_WINDOW | // support window
PFD_SUPPORT_OPENGL | // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
24, // 24-bit color depth
0, 0, 0, 0, 0, 0, // color bits ignored
0, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buffer
0, 0, 0, 0, // accum bits ignored
32, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0 // layer masks ignored
};
2.
WM_CREATE内で以下のような関数を呼びます。
case WM_CREATE:
WinDC = GetDC(hwnd); //ウインドウのデバイスコンテキスト取得
//デバイスコンテキストにピクセルフォーマットを設定
pixelFormat = ChoosePixelFormat(WinDC, &pfd);
SetPixelFormat(WinDC, pixelFormat, &pfd);
//OpenGL描画用のハンドルを作成
hRC = wglCreateContext(WinDC);
ReleaseDC(hwnd, WinDC);
3.OpenGL関数を呼び出す前後に以下のような関数を呼びます。
WinDC = GetDC(hwnd); //デバイスコンテキスト作成
wglMakeCurrent(WinDC, hRC); //OpenGLとの接続
…OpenGL関数の呼び出し…
wglMakeCurrent(NULL, NULL); //OpenGLと切断
ReleaseDC(hwnd, WinDC); //デバイスコンテキストの開放
デバイスコンテキストをグローバル変数にし、WM_CREATEで作成した後、
アプリケーション終了で開放する方法でもいいと思います。
その場合はGetDC()とReleaseDC()はOpenGL関数の呼び出し毎に呼び出さなくてもよいです。
|