GLSL 始めました.

OpenGL Shading Language(略してGLSL.) 始めました.

暫くreal-time 3DCGの世界から離れていたので,GLSLとDirectXnvidiaのCgとの違いが良く判っていない.そこで,とりあえず google で調査….どうもGLSLは,他のshaderと異なり,shader のコンパイルをドライバが実行時に行うようだ.*1

*1:ドライバ作る人大変そー

GLSLのキホン.

GLSL の使い方としては, program をつくり,レンダリング時にそのprogramを指定してレンダリングするだけ.

programは, shader をリンクして作る.
shaderには

  • vertex shader (GL_VERTEX_SHADER_ARB)
  • fragment shader (GL_FRAGMENT_SHADER_ARB)

があり,これらを組み合わせることが出来るみたい.


programを作る流れとしては,

  • GLSL の Program を作成.
 program = glCreateProgramObjectARB()
  • Program に, shader を追加.
  glAttachObjectARB(prog, shader);
  • リンクする.
  glLinkProgramARB(program);

レンダリング時に,このprogramを使うには

 glUseProgramObjectARB(program);

とするだけでよい.



一方,shader object の作成の流れは,以下のとおり.

  • shader object の作成.
 shader = glCreateShaderObjectARB(shaderの種類)
glShaderSourceARB(shader,  shaderのソースコードの文字列)
glCompileShaderARB(shader)


チョー簡単.

Linux で GLSLを使うために必要となるライブラリなど.

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>

とするだけでコンパイルできる.