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: