最近この本を買ったおかげで、久々にopenFrameworksにはまっております。

英語の本だけど、コードが多いので結構サクサク読める。 内容も初期設定から、OpenGLのShaderを使った2D/3D、 OSCを使ったネットワーキング、 Raspbery Piなど、かなり充実してるのでオススメ。

いろいろサンプルを見てみる

ある程度読んでから、OpenGLとかShaderとかもう少しやってみようと 思って、openFrameworks/tutorials/shaderにあるサンプルを 実行しようとした。しかしmain.cppの下の位置でエラーが出る。

#ifdef USE_PROGRAMMABLE_RENDERER
   ofSetCurrentRenderer(ofGLProgrammableRenderer::TYPE); //←ここで引数が合わずエラー
#endif

何が悪いのか調べてみたら、ofSetCurrentRenderer() missing from OF Master #21 に答えがあった。もっと新しいサンプル見ろと。

main.cppを下記のように書き換えればOK

#include "ofMain.h"
#include "ofApp.h"

//========================================================================
int main( ){
	ofGLWindowSettings s;
	s.setGLVersion(3,2);
	ofCreateWindow(s);

	// this kicks off the running of my app
	// can be OF_WINDOW or OF_FULLSCREEN
	// pass in width and height too:
	ofRunApp(new ofApp());

}

setGLVersion()では、使いたいShaderのバージョンに合わせてOpenGLの メジャー、マイナーバージョンを指定する。OpenGL、GLSL、Shaderに書く versionディレクティブの対応は以下の通り。

OpenGLGLSL version
2.1 1.2 #version 120
3.2 1.5 #version 150
3.3 3.3 #version 330
4.0 4.0 #version 400

上で紹介した本では主にGLSL 1.2で書いてあったが、 今回動かしたかったShaderはGLSL 1.5だったので、 setGLVersion(3,2);としてる。

ただ、他のサンプル見てみると新しいサンプルには3.3とか4.0あったので、 そっち覚えたほうがいいのかな?

まあここまでやって動いたので、今日はここまで。