実際に、AVCaptureVideoPreviewLayer などの上に OpenGL コンテンツを重ねることはできますが、パフォーマンスが低下します。Apple は、不透明でない OpenGL ES コンテンツを他の表示要素の上に重ねないことを強くお勧めします。iOS用のOpenGL ESプログラミングガイドから:
最高のパフォーマンスを得るには、アプリケーションは OpenGL ES のみに依存してコンテンツをレンダリングする必要があります。これを行うには、CAEAGLLayer オブジェクトを保持するビューのサイズを画面に合わせ、その opaque プロパティを YES に設定し、他のコア アニメーション レイヤーまたはビューが表示されないようにします。OpenGL ES レイヤーが他のレイヤーの上に合成されている場合、CAEAGLLayer オブジェクトを不透明にすると、パフォーマンス コストは削減されますが、なくなるわけではありません。
CAEAGLLayer オブジェクトがレイヤー階層でその下にあるレイヤーの上にブレンドされている場合、コア アニメーションによって正しく合成されるためには、レンダーバッファーのカラー データが事前に乗算されたアルファ形式である必要があります。OpenGL ES コンテンツを他のコンテンツの上にブレンドすると、パフォーマンスが大幅に低下します。
正直なところ、ビデオをテクスチャとして取り込んで、それを 3D オーバーレイの背後にビルボードとして表示するのはそれほど難しくありません。このサンプル アプリケーションでは、カメラ ビデオを OpenGL ES (2.0) テクスチャにパススルーして、画面に表示します。少し変更するだけで、その上に 3D コンテンツを配置できます。これにより、AVCaptureVideoPreviewLayer の上に不透明でない 3-D コンテンツを描画しようとするよりもはるかに優れたパフォーマンスが得られます。
ただし、OpenGL ES コンテンツ上に単純な静的 UIView を表示したいだけの場合は、パフォーマンスを大幅に低下させることなく実行できます (私の経験ではフレームレートが約 5% 低下します)。