2

iOSデバイス(iPad)で、レンダリングバッファーのストレージを、ビューをバックするCAEAGLLayerからglRenderbufferStorageを介して明示的なストレージに変更することにしました。残念ながら、次のコードは有効なFBOになりません。誰かが私が逃したものを教えてもらえますか?:

glGenFramebuffers(1, &m_framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer);

glGenRenderbuffers(1, &m_colorbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_colorbuffer);

GLsizei width  = (GLsizei)layer.bounds.size.width;
GLsizei height = (GLsizei)layer.bounds.size.height;
glRenderbufferStorage(m_colorbuffer, GL_RGBA8_OES, width, height);

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_colorbuffer);

注:
レイヤーサイズは有効で正しいものです。これは、堅実なプロダクションワーキングレンダリングコードです。私が行っている唯一の変更は次の行です。

glRenderbufferStorage(...)

以前私はしました:

[m_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer]
4

2 に答える 2

5

iOSでは、カラーアタッチメントのバインドには使用できません。ビューレイヤーglRenderBufferStorageからストレージをリクエストする必要があります。EAGLContextビューコードのどこかで、次のようなコードを使用する必要があります。

// First Bind a Render Buffer
glBindRenderbuffer(GL_RENDERBUFFER, m_colorBuffer);
[context renderBufferStorage:GL_RENDERBUFFER forDrawable:(CAEAGLLayer*) self.layer];

iOSで必要な2行目を回避することはできません。これは、renderbufferからレイヤーへの「リンケージ」を参照する行です。

于 2012-01-18T14:08:05.793 に答える
2

の最初の引数はではなくでglRenderbufferStorageある必要があります。GL_RENDERBUFFERm_colorbuffer

(前回の呼び出しからターゲットm_colorbufferにバインドされているため、格納されます)GL_RENDERBUFFERglBindRenderbuffer

于 2011-01-28T20:22:28.360 に答える