0

Apple の OpenGL ES Programming Guideによると、「[a] フレームバッファがユーザーに表示されることを意図している場合は、特別なコア アニメーション対応のレンダバッファを使用してください。」

このコア アニメーションをレンダーバッファに対応させるには、次のコードを使用して「UIView をサブクラス化して [the] iOS アプリケーション [および] layerClass をオーバーライドするための OpenGL ES ビューを作成する」必要があります。

+ (Class) layerClass
{
    return [CAEAGLLayer class];
}

ただし、OpenGL をエンド ユーザーに表示するApple の GLCameraRipple の例を調べると、layerClass がオーバーライドされているようには見えません。layerClass または CAEAGLLayer をテキスト検索すると、それらが見つからないことがわかります。

ユーザーに直接表示するための他のアプローチを探す場合、Apple は他の 2 つの OpenGL アプローチを提供していますが、どちらもユーザーに直接表示するためではなく、オフスクリーン レンダリング用であることを暗示しているようです。(つまり、「フレーム バッファを使用してオフスクリーン イメージ処理を実行する場合は、レンダ バッファをアタッチします。フレーム バッファ イメージを後のレンダリング ステップへの入力として使用する場合は、テクスチャをアタッチします。」)

Core Animation 対応のレンダーバッファを使用する以外に、OpenGL コンテンツを表示する別の方法はありますか? または、Apple が何らかの方法でレイヤー クラスをオーバーライドしているため、OpenGL コンテンツは別の方法で Core Animation 対応になっていますか?

4

1 に答える 1

3

GLCameraRipple の例で CAEAGLLayer をサポートするサブクラス化された UIView が表示されない理由は、GLKView を使用しているためです。GLKView は iOS 5.0 で GLKit の一部として導入されたクラスであり、CAEAGLLayer を使用するための明示的なオーバーライドやそれに対応するレンダーバッファーのセットアップなど、いくつかの共通コードをラップします。

これはまだ行われており、あなたから抽象化されているだけです。OpenGL ES コンテンツを画面に表示するには、何らかの方法で CAEAGLLayer を通過する必要があります。

オフスクリーン レンダリングは別の動物です。表示用のレイヤーにアタッチしていないため、レイヤーは必要ありません。テクスチャにレンダリングする場合は、テクスチャを FBO のターゲットとしてアタッチします。それだけです。

于 2012-05-23T19:10:16.337 に答える