0

iOSでのOpenGLESフレームバッファ、レンダーバッファなどの作成、割り当て、およびバインドについて理解を深めたいと思います。EAGLContextクラスとEAGLSharegroupクラスは通常、そのようなオブジェクトの割り当てとバインドを管理することを理解しています。ただし、アップルのドキュメントでは、EAGLContextクラスを使用せずにGLオフスクリーンレンダリングを実行できることが示唆されており、その方法に興味があります。誰かがコード例へのポインタを持っていますか?

また、EAGLContextを使用してオフスクリーンレンダリングを実行する方法を示す例にも興味があります。

4

1 に答える 1

2

iOSでOpenGLESを使用してコンテンツをレンダリングする唯一の方法は、オフスクリーンまたはオンスクリーンで、EAGLContextを介して行うことです。OpenGL ESプログラミングガイドから:

アプリケーションがOpenGLES関数を呼び出す前に、EAGLContextオブジェクトを初期化し、それを現在のコンテキストとして設定する必要があります。

次の行が混乱を引き起こしている可能性があると思います。

EAGLContextクラスは、アプリケーションがOpenGLESコンテンツをCoreAnimationと統合するために使用するメソッドも提供します。これらのメソッドがないと、アプリケーションはオフスクリーン画像の操作に制限されます。

つまり、コンテンツを画面にレンダリングする場合は、EAGLContextクラスによってのみ提供されるいくつかの追加メソッド(など)を使用し-renderbufferStorage:fromDrawable:ます。画面外に描画する場合でも、OpenGL ESコマンドを管理するにはEAGLContextが必要ですが、画面上に描画するには、EAGLContextに固有のこれらの特定のメソッドが必要です。

2番目の質問に対して、オフスクリーンレンダリングをどのように設定するかは、このオフスクリーンレンダリングの構成(テクスチャバックFBO、デプスバッファーなど)によって異なります。たとえば、次のコードは、深度バッファを持たず、すでに設定されているoutputTextureテクスチャにレンダリングする単純なFBOを設定します。

glActiveTexture(GL_TEXTURE1);
glGenFramebuffers(1, &filterFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, filterFramebuffer);
glBindTexture(GL_TEXTURE_2D, outputTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (int)currentFBOSize.width, (int)currentFBOSize.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, outputTexture, 0);

コード例として、オープンソースのGPUImageフレームワーク(単純な画像レンダリングを行うだけ)またはオープンソースのMoleculesアプリケーション(深度バッファーを使用してより複雑なオフスクリーンレンダリングを行う)内でこれを行う方法を確認できます。

于 2012-06-23T01:13:44.320 に答える