GLEWとは

GLEW(OpenGL Extension Wrangler Library)はOpenGL拡張をロードしてくれるライブラリである. GLEWを用いることでOpenGL拡張を手軽に用いることができる

GLEWライブラリのビルドとインストール

  • ダウンロード
    http://glew.sourceforge.net/ からソースコード(glew-*.*.*.zip)をダウンロードして,解凍 or SVNリポジトリから最新版をチェックアウトする.TortoiseSVNならソース群をダウンロードしたいフォルダで右クリック,TortoiseSVN->チェックアウトでリポジトリのURLに
    https://glew.svn.sourceforge.net/svnroot/glew/trunk/glew
    を指定.
  • ビルド
    1. ダウンロードしたファイルを解凍.
    2. 解凍したフォルダの build\vc10 に glew.sln というファイルがあるので,これをVisual Studio 2012(以下VS)で開く.VS2013の場合はbuild\vc12を使う.
    3. プロジェクトの構成を選択して,ビルドする.プロジェクトの構成には,Debug, Debug MX, Release, Release MXがある.通常はReleaseを選んでおけばよい.MXがついた構成はMultiple Rendering Contextsをサポートさせたい場合に用いる.
  • インストール
    以下のようにファイルをコピーする.
    bin/glew32.dll → アプリケーションの実行フォルダ or %SystemRoot%/system32
    lib/glew32.lib → プロジェクトのライブラリフォルダ
    include/GL/glew.h と wglew.h → プロジェクトのインクルードフォルダ

GLEWを用いたプロジェクトのビルド

インクルードファイル

以下のようにglew.hをインクルードする.

#include <GL/glew.h>

GLUTも用いる場合は,glew, glutの順にインクルードする.

#include <GL/glew.h>
#include <GL/glut.h>

glew.h内でgl.hをインクルードしており,glew.hの前にgl.hがインクルードされると, GLEWはプロプロセッサにより警告を出すようにされているため,glut.hの前にインクルードする.

ライブラリファイル

プロジェクトのプロパティで,構成プロパティ→リンカ→入力→追加の依存ファイル に glew32.lib を追加する or ソースファイルの先頭にプラグマを用いて以下のように指定する.

#pragma comment(lib, "glew32.lib")

初期化

GLEWを用いてOpenGL拡張を用いる前に,glewInit()を用いて初期化する必要がある.

	GLenum err = glewInit();
	if(err == GLEW_OK){
		cout << "GLEW OK : Glew Ver. " << glewGetString(GLEW_VERSION) << endl;
	}
	else{
		cout << "GLEW Error : " << glewGetErrorString(err) << endl;
	}

ただし,glewInit()を呼び出す前にレンダリングコンテキストを生成しておかなかればならない. GLUTの場合,glutInit(),glutCreateWindow()を行った後にglewInit()を呼び出せばよい.

使用できる拡張のチェック

もしある拡張が利用可能ならば,GLEW_拡張名 という名前の変数が定義されているので,

	if(GLEW_VERSION_2_1 && GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader){
		・・・
	}

のようにチェックすることができる.最初のGLEW_VERSION_2_1はOpenGLのバージョンをチェックしている.

また,拡張名をそのまま用いてチェックしたい場合は,glewIsSupported()を用いる.

	if(!glewIsSupported("GL_VERSION_2_1 "
						"GL_ARB_vertex_shader "
						"GL_ARB_fragment_shader "
						"GL_ARB_geometry_shader4 "
						)){
		cout << "ERROR: Support for necessary OpenGL extensions missing." << endl;
		exit(0);
	}

glewIsSupported()はGLEW ver1.3.0以降が必要なので注意.1.3.0より前のバージョンのGLEWではglewGetExtension()が用いられていた.

Rendering Contexts for OpenGL

レンダリングコンテキスト(RC)はWindowsのウィンドウシステムとOpenGLをリンクするものであり, スレッドから発信したOpenGLコマンドはこのレンダリングコンテキストを通してウィンドウシステムに送られ,実行される. 描画はリンク付けされたウィンドウ上でなされる.

Win32 APIなどを用いてウィンドウ上にウィジットなどを描画する際にはデバイスコンテキスト(DC)が良く用いられる. OpenGLアプリケーション生成時にはDCにRCを関連付けることでOpenGL描画を行う. RCはDCとよく似ていているが,DCにはWindowsのGraphics Device Interface(GDI) 命令を指定するのに対して,RCはOpenGLに関する情報を持ち,OpenGL命令を渡す.

OpenGLコマンドを使用するスレッドはcurrent rendering context(Current RC)を持つ必要があり,Current RCなしでOpenGL命令を呼び出しても何も起こらない. そのため,アプリケーション側がスレッドを生成したとき,RCも生成して,関連付ける必要がある(GLUTなどでは内部的にこれをやってくれている). 注意として,1つのアプリケーションが多数のスレッドを持つことはできるが,1つのスレッドが持てるCurrent RCは1つのみである.

Multiple Rendering Contexts


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-03-08 (金) 18:06:03