Flat Leon Works

アプリやゲームを作ってます。

【OpenGL】個人的逆引きリファレンス

  • 個人的な覚書としての逆引きリファレンスです
  • 今のところ OpenGL ES 2.0 のみを対象としています
  • 思いついたら追加していきます

現在のフレームバッファ(カラーバッファ)のサイズを取得する

bool GetCurrentColorBufferSize( GLint& width, GLint& height )
{
    // 現在バインドされているフレームバッファ名を取得
    GLint currentFrameBufferName = 0;
    glGetIntegerv( GL_FRAMEBUFFER_BINDING, &currentFrameBufferName );

    // フレームバッファがバインドされていないと情報が取得できない
    if ( currentFrameBufferName == 0 ) { return false; }

    // あとで元に戻すために現在バインドされているレンダーバッファ名を取得
    GLint oldRenderBufferName = 0;
    glGetIntegerv( GL_RENDERBUFFER_BINDING, &oldRenderBufferName );

    // 現在のフレームバッファにアタッチされているカラーバッファのレンダーバッファ名を取得
    GLint colorBufferName = 0;
    glGetFramebufferAttachmentParameteriv( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &colorBufferName );

    // カラーバッファがアタッチされていない?
    if ( colorBufferName == 0 ) { return false; }

    // レンダーバッファ(カラーバッファ)をバインド
    glBindRenderbuffer( GL_RENDERBUFFER, colorBufferName );

    // カラーバッファの幅と高さを取得
    glGetRenderbufferParameteriv( GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width );
    glGetRenderbufferParameteriv( GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &height );

    // レンダーバッファのバインドを元に戻す
    glBindRenderbuffer( GL_RENDERBUFFER, oldRenderBufferName );

    return true;
}

iOSでデフォルトのフレームバッファをバインドする(GLKViewControllerを使用している場合)

GLKViewのbindDrawableメソッドを使う。GLKViewControllerのviewDidLoad呼び出し時などはフレームバッファがバインドされていないので、フレームバッファ関連のOpenGL関数を使うにはこの方法で事前にバインドしておく必要がある。

GLKView *view = (GLKView *)self.view;
[view bindDrawable];

リファレンス : bindDrawable - GLKView | Apple Developer Documentation
参考 : xcode - iOS GLKit and back to default framebuffer - Stack Overflow