- wgl関数を使ってみる -
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関数の呼び出し毎に呼び出さなくてもよいです。


inserted by FC2 system