HD映像のリアルタイム処理 on iPhone

特に今回はCPUを音声処理で使用するので、画像処理は可能な限りGPUに任せたい。となると画像(映像のフレーム)をTextureとして次から次に、例えば20fps(毎秒20枚)といったスピードで処理しなくてはいけない。当然これはOpenGLの鉄則、Textureは起動時にロード、に違反し、ロードに時間がかかって使い物にならない。

OpenGL ES 2.0では、こういった場合にRender to Textureという、Textureに直接書き込む手法を2つ提唱している。詳細については以下を参照。

Render to Texture with OpenGL ES

iPhone 3GS, iPhone 4OpenGL ES 2.0をサポートしているが、こういった手法は一切触れていない。しかし搭載されているGPUPOWERVR SGX)のマニュアルを見てみると、以下のようにある。

6.4. Render to Texture
OpenGL ES 2.0 offers two ways of rendering to textures. One is using EGL pbuffer surfaces; the other is attaching a renderable texture to a framebuffer object (FBO). The latter approach is the recommended one for POWERVR SGX.

さらにはSDKとデモまであった。

Khronos OpenGL ES 2.0 SDKs for POWERVR SGX

ということで、早速iPhone 4を申し込み。