OpenGL Shading Language(略してGLSL.) 始めました.
暫くreal-time 3DCGの世界から離れていたので,GLSLとDirectXとnvidiaのCgとの違いが良く判っていない.そこで,とりあえず google で調査….どうもGLSLは,他のshaderと異なり,shader のコンパイルをドライバが実行時に行うようだ.*1
*1:ドライバ作る人大変そー
GLSL の使い方としては, program をつくり,レンダリング時にそのprogramを指定してレンダリングするだけ.
programは, shader をリンクして作る.
shaderには
があり,これらを組み合わせることが出来るみたい.
programを作る流れとしては,
program = glCreateProgramObjectARB()
glAttachObjectARB(prog, shader);
glLinkProgramARB(program);
レンダリング時に,このprogramを使うには
glUseProgramObjectARB(program);
とするだけでよい.
一方,shader object の作成の流れは,以下のとおり.
shader = glCreateShaderObjectARB(shaderの種類)
glShaderSourceARB(shader, shaderのソースコードの文字列)
glCompileShaderARB(shader)
チョー簡単.
shaderのコンパイルをドライバ側が行ってくれるため,専用コンパイラなどのSDKを特に用意する必要が無い.
実際,Linuxでグラフィックボードがgeforce 系なら,X用のnvidia のドライバを入れるだけでGLSLは使える.
ただし,まだGLSLは一般的ではないので,nvidiaのドライバを入れただけでは,GLSLを使うための関数のヘッダファイル(glext.h)が /usr/include/GL 以下にインストールされない.
glext.h は/usr/share/doc/NVIDIA_GLX-1.0/include/GL/以下にあるので,/usr/include/GL 以下にコピーするか Makefile で,
CFLAGS=-I/usr/share/doc/NVIDIA_GLX-1.0/include/
とすれば良い.
とにかく,ちゃんとヘッダファイルが参照できれば,ソースファイル側では
#include <GL/glext.h>
とするだけでコンパイルできる.
programのハンドルとして0を指定すればよい.
glUseProgramObjectARB(0);