OpenGL Pixel Buffer Objects

  • 頂点データのピクセル版。
  • Pixel Buffer Objects (PBO) の使い方は以下のように行います
glGenBuffers(1, &name);//バッファを1つ確保
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, name);//関連付け
glBufferData(GL_PIXEL_UNPACK_BUFFER, width * height, pDat, GL_STATIC_DRAW);//メモリを確保

GLubyte *c = (GLubyte*)glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_READ_WRITE);//そのメモリに対して処理
//*c に対して何か処理
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);//処理終わり

glBufferSubData(GL_PIXEL_UNPACK_BUFFER, offset, size, pDat);//メモリの一部分を書き換え

glDrawPixels(width, height, GL_RGB, GL_UNSIGNED_BYTE, 0);//PBOのデータをスクリーンに描写

glDeleteBuffers(1, &name);//バッファを削除
  • UNPACK は、アプリケーションからデータを参照するときに使用、例えば glDrawPixels, glTexImage2D など。一方、PACK は、アプリケーションにデータを戻すときに使用、例えば、glReadPixels, glGetTexImage など。
  • GPU に頻繁に使用される、画像データを PBO にすることは高速化につながります
  • PBO を使用することで、メモリとビデオメモリ間に画像データが行き来することを減らすことができます
  • パイプラインで実行された結果から、画像データを読み出せます