テクスチャとレンダリングコンテキスト
OpenGLのテストコードを整理して、簡単なテクスチャを貼ってみました。
コード整理の差分
テクスチャ追加の差分
OpenGLの関数はどれもレンダリングコンテキストを指定できなくて、wglMakeCurrent()やglXMakeCurrent()で予め切り替えておく必要があるわけですが、この仕様はRAIIと相性が悪いです。
class texture { public: texture() { ::glGenTextures(1, &handle_); } ~texture() { ::glDeleteTextures(1, &handle_); } private: ::GLuint handle_; };
みたいなコードでは、glGenTextures()とglDeleteTextures()で違うレンダリングコンテキストが使用される可能性があります。
仕方がないので、とりあえずglGenTextures()とglDeleteTextures()の前にコンテキストを設定し直すようにしています。
ただ、何かする度にコンテキストを切り替えていてはパフォーマンスが悪いので、使い勝手とのトレードオフをしながら調整していくことにします。
ようやくgcc4.3.0ビルド完了
「GMPとMPFRをgccのソースツリーにコピーしたらビルド楽だよ」と書こうと思って試したんですが、こうするとgccのビルドステップ毎にGMPとMPFRまでビルドされてすごい時間がかかりました。
昨日寝る前に仕込んで、Pen4 2.6GHzで16時間(C/C++のみ)、、、。
Cygwinでなければもっと短い時間で済むはずです。
さて、注目のC++0x対応ですが、C++0xモードかどうかの判定はマクロ__GXX_EXPERIMENTAL_CXX0X__が定義されているかどうかで行えます。
また、Boost 1.35では以下のマクロが定義される予定です。
- BOOST_HAS_STATIC_ASSERT
- static_assertが使える
- BOOST_HAS_VARIADIC_TMPL
- 可変長引数テンプレートが使える
- BOOST_HAS_RVALUE_REFS
- 右辺値参照が使える
- BOOST_HAS_DECLTYPE
- decltypeが使える
Hamigakiライブラリもぼちぼち可変長引数に対応していきます。