0001: // --------------------------------------------------------------------------- 0002: // File: tpotCGL.cpp 0003: // 0004: // OpenGLのラッパークラス 0005: // 0006: // Copyright (c) 2005 IMAGIRE Takashi. All rights reserved. 0007: // --------------------------------------------------------------------------- 0008: #include "stdafx.h" 0009: #include <windows.h> 0010: #include <GL/gl.h> 0011: #include <GL/glu.h> 0012: #include "tpotCGL.h" 0013: 0014: namespace tpot 0015: { 0016: // ----------------------------------------------------------------------- 0017: // コンストラクタ 0018: // ----------------------------------------------------------------------- 0019: CGl::CGl( HWND hWnd ) 0020: { 0021: _hWnd = hWnd; 0022: _hDC = GetDC(_hWnd); 0023: 0024: // ピクセル フォーマットを設定する 0025: if( 0 != SetupPixelFormat( _hDC ) ) return; 0026: 0027: // レンダリング コンテキストの作成 0028: _hglrc = wglCreateContext (_hDC); 0029: } 0030: 0031: 0032: // ----------------------------------------------------------------------- 0033: // デストラクタ 0034: // ----------------------------------------------------------------------- 0035: CGl::~CGl() 0036: { 0037: // レンダリング コンテキストをカレントからはずす。 0038: wglMakeCurrent (NULL, NULL) ; 0039: 0040: // レンダリング コンテキストの削除 0041: wglDeleteContext (_hglrc); 0042: 0043: // GetDC で確保した分を開放 0044: ReleaseDC( _hWnd, _hDC ); 0045: } 0046: 0047: 0048: // ----------------------------------------------------------------------- 0049: // ピクセル フォーマットを設定する 0050: // ----------------------------------------------------------------------- 0051: int CGl::SetupPixelFormat( HDC hdc ) 0052: { 0053: int pixelformat; 0054: 0055: static PIXELFORMATDESCRIPTOR pfd = { 0056: sizeof (PIXELFORMATDESCRIPTOR), // 構造体のサイズ 0057: 1, // OpenGL バージョン 0058: PFD_DRAW_TO_WINDOW | // ウィンドウスタイル 0059: PFD_SUPPORT_OPENGL | // OpenGL を使う 0060: PFD_DOUBLEBUFFER, // ダブルバッファ 0061: PFD_TYPE_RGBA, // ピクセルのカラーデータ 0062: 32, // 色のビット数 0063: 0, 0, 0, 0, 0, 0, 0, 0, // RGBAカラーバッファのビット 0064: 0, 0, 0, 0, 0, // アキュムレーションバッファのピクセル当りのビット数 0065: 32, // デプスバッファ のピクセル当りのビット数 0066: 0, // ステンシルバッファのピクセル当りのビット数 0067: 0, // 補助バッファ のピクセル当りのビット数 0068: PFD_MAIN_PLANE, // レイヤータイプ 0069: 0, // 0070: 0, // 0071: 0, // 0072: 0 // 0073: }; 0074: 0075: if ( 0 == (pixelformat = ChoosePixelFormat (hdc, &pfd)) ) 0076: { 0077: return 1; 0078: } 0079: 0080: if ( FALSE == SetPixelFormat(hdc, pixelformat, &pfd) ) 0081: { 0082: return 2; 0083: } 0084: 0085: return 0; 0086: } 0087: 0088: // ======================================================================= 0089: // 外部インターフェイス 0090: // ======================================================================= 0091: // ----------------------------------------------------------------------- 0092: // 初期化 0093: // ----------------------------------------------------------------------- 0094: void *InitGL( System::IntPtr hWnd ) 0095: { 0096: return new CGl((HWND)hWnd.ToInt32()); 0097: } 0098: 0099: 0100: // ----------------------------------------------------------------------- 0101: // 開放 0102: // ----------------------------------------------------------------------- 0103: void DestroyGL(void*p) 0104: { 0105: delete (CGl*)p; 0106: } 0107: }// tpot 0108: