NSImageオブジェクトをOpenGLのテクスチャに指定する

NSImage+OpenGLによる描画のメモ書きです。

OpenGLに必要なNSImageの画像データは、以下のようにして取得します。

    NSBitmapImageRep* imgRep = [NSBitmapImageRep imageRepWithData:[img TIFFRepresentation]];
    int width           = [imgRep pixelsWide];
    int height          = [imgRep pixelsHigh];
    int bytesPerPixel   = [imgRep samplesPerPixel];
    void* data          = [imgRep bitmapData];

必要な情報がそろったら、以下のようにしてOpenGL用のテクスチャを作成・指定します。

    GLuint m_texture;   // テクスチャ

    // テクスチャを作成
    glGenTextures(1, &texture);

    // 作成したテクスチャをバインド
    glBindTexture(GL_TEXTURE_2D, texture);

    // 拡大縮小時の描画方法を指定
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

    // 画像を作成したテクスチャに指定する
    gluBuild2DMipmaps(
        GL_TEXTURE_2D,
        static_cast<gluint>(bytesPerPixel),
        static_cast<gluint>(width),
        static_cast<gluint>(height),
        GL_RGB,
        GL_UNSIGNED_BYTE,
        data
    );

    // 作成しておいたテクスチャをバインドして描画されるようにする
    glEnable(GL_TEXTURE_2D);

詳細の説明については割愛させていただきます。
肝となる部分はgluBuild2DMipmaps関数の呼び出しです。
ここでMSImageオブジェクトから取得した画像データの情報を指定しています。

テクスチャの指定自体はすんなりと出来ます。
上記はクラス化して使った方が良いでしょう。