Skip to content

Instantly share code, notes, and snippets.

@hrfm
Last active November 5, 2015 15:34
Show Gist options
  • Save hrfm/a146085570babb86b52f to your computer and use it in GitHub Desktop.
Save hrfm/a146085570babb86b52f to your computer and use it in GitHub Desktop.
Cinder が 0.8.x から 0.9 になったので、自前のライブラリを対応させるために奮闘しつつ書いてるメモ

自作ライブラリを Cinder 0.8 から 0.9 にした時にやったこと

まだまだ途中なので追記していく予定

Vec, Matrix, Quatf の表記変更

それぞれの表記が変わりました

0.8.x 0.9.x
ci::Vec2i, ci::Vec3i, ci::Vec4i ivec2, ivec3, ivec4
ci::Vec2f, ci::Vec3f, ci::Vec4f vec2, vec3, vec4
ci::Vec2d, ci::Vec3d, ci::Vec4d dvec2, dvec3, dvec4
ci::Matrix33f, ci::Matrix44f mat3, mat4
ci::Matrix33d, ci::Matrix44d dmat3, dmat4
ci::Quatf, ci::Quatd quat, dquat

length などの関数がメンバ関数ではなくなった

各クラスにメンバとして定義されていた各関数が ci 以下に移動しました。

0.8.x 0.9.x 備考
myVec.length() ci::length(myVec)
myVec.normalized() ci::normalize(myVec)
myQuat.inverse() ci::inverse(myQuat)
myQuat.getAngle() ci::angle(myQuat) 違うかも?

setToIdentity がなくなった

いままで、単位行列を作る場合

Matrix44f mat;
mat.setToIdentity();

としていたが、引数なしのコンストラクタが単位行列を返すようになった。
そのため、setToIdentity を置き換える場合は

mat4 mat;
mat = mat4();

とかになる模様。

ci::gl::Texture まわりの変更

Texture の細分化

今まで ci::gl::Texture で作っていたものは
ci::gl::TextureBase を基底クラスとしたより厳密なクラスに別れました。
ci::gl::Texture1d,ci::gl::Texture2d,ci::gl::Texture3d がある模様。
(つまりボリュームテクスチャが使える?←未検証)

生成方法の変更

そして生成方法も、コンストラクタは全てprotectedに変更され
クラスそのものをインスタンス化するのではなく、ci::gl::TextureXd::create() 経由になり、
基本的には ci::gl::TextureXdRef を使うように変更なりました。

Texture2d を使うのか、Texture3d を使うのかわからないクラスの引数とかは
TextureBaseRef を指定しとくといいかも。

その後いろいろ試してみたけど単純に TextureRef でいいかも。

ci::gl::Fbo まわりの変更

生成方法の変更

ci::gl::FboRef が追加され、ci::gl::Fbo 自体を
インスタンス化しないようになりました。

0.8.x 0.9.x 備考
ci::gl::Fbo(); 廃止 protected コンストラクタになりました
new ci::gl::Fbo() 廃止 同上
- ci::gl::Fbo::create() 引数は一緒だが返り値がci::gl::FboRefになりました

オフスクリーンレンダリングしたテクスチャの取得

今まで getTexture() にて取得していた Fbo 自体のテクスチャは
getColorTexture() となった模様?(要検証)

使用方法の変化

なんか ScopedFramebuffer というものが追加されまして
これを使うと、そのスコープから処理が抜けた場合に
勝手に後処理をしてくれるようになった模様。

これにより 0.8.x では以下のように書いていたものが

void hoge(){
    myFbo.bindFramebuffer();
    {
        // いろんな処理
    }
    myFbo.unbindFramebuffer();
}

0.9.x では

void hoge(){
    ci::gl::ScopedFramebuffer fbScp( myFbo );
    // いろんな処理
}

みたいになる模様。

ci::gl::GlslProg まわりの変更

生成方法の変更

こちらも ci::gl::GlslProgRef が追加され、
ci::gl::GlslProg 自体をインスタンス化しないようになりました。

0.8.x 0.9.x 備考
ci::gl::GlslProg(); 廃止 protected コンストラクタになりました
new ci::gl::GlslProg() 廃止 同上
- ci::gl::GlslProg::create() 引数は一緒だが返り値がci::gl::GlslProgRefになりました

使い方の変更

こちらも Fbo 同様 ScopedGlslProg というものが追加されてました

0.8.x では

void hoge(){
    myShader.bind();
    {
        // 描画処理
    }
    myShader.unbind();
}

と書いていたのが 0.9.x では

void hoge(){
    ci::gl::ScopedGlslProg shaderScp( myShader );
    // 描画処理
}

となります。

ただなぜか shader->unbind() がなくなった(!)ので
shader->bind() を自前で書いた場合には自己責任で

gl::getStockShader( gl::ShaderDef().color() )->bind();

とかしないとダメかも?
詳しいことは調べてみないとよくわからない。
(個人的には便利なんだか何なんだかよくわからん。)

glBegin, glVertex, glEnd などの gl 描画系の関数が廃止

全部 ci::gl 経由で使えってことになりました。
詳しいことは samples/_opengl を見ろとのこと。

ci::gl::setViewport が ci::gl::viewport に変更

表題の通り Viewport の指定の仕方が変更になった。

また、ci::gl::getViewport() の返り値が
ci::Area から std::pair<ci::ivec2,ci::ivec2> になりました。

ObjLoader の使い方の変更

いままで

TriMesh mesh;
ObjLoader loader( (DataSourceRef)ci::app::loadResource(path) );
loader.load( &mesh );
ci::gl::VboMesh mesh = ci::gl::VboMesh( mesh );

これから

ObjLoader loader( (DataSourceRef)ci::app::loadResource(path) );
ci::gl::VboMeshRef mesh = ci::gl::VboMesh::create( loader );

getArgs が getCommandLineArgs になった

コマンドラインの引数をたまに使ってるんだけど
どこにも書いてなくてめっちゃ困った。

prepareSettings がなくなった

理由は特に調べてない。

TriMesh

appendVertex がなくなった appendPosition に変更???

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment