テクスチャとレンダリングコンテキスト

テクスチャを貼ってみた図

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ライブラリもぼちぼち可変長引数に対応していきます。