2011-01-28 13 views
2

iOSデバイス(iPad)では、glRenderbufferStorage経由でビューを明示的なストレージにバックアップするCAEAGLLayerからレンダリングバッファのストレージを変更することに決めました。残念なことに、次のコードでは有効なFBOが得られません。層のサイズが有効で正しいです
:誰かが注意私は?:なぜ、iOSでglRenderbufferStorageが失敗しているように見えますか?

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] 
+0

を層にレンダから「リンケージ」を参照してくださいラインで、それはiOSので必要だとして、あなたは二行目を避けることができない

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

:どこかのビューのコードには、このようなコードを使用する必要があります。正しい答えは、 '[context renderbufferStorage]'を 'glRenderbufferStorage(...)'呼び出しで置き換えることができないからです。 – bobobobo

答えて

2

glRenderbufferStorageための最初の引数がGL_RENDERBUFFER、ないm_colorbufferでなければなりません。 iOS版で

(つまり、前のglBindRenderbuffer呼び出しからGL_RENDERBUFFER標的に結合しているものであるため、それはm_colorbufferに保存されます)

+0

良いキャッチです。とった。私はこのレンダバッファにレンダリングした結果をどのように表示するかについてはまだ悩んでいます。私のCAEAGLLayerとレンダバッファーとの間のリンクを確立しないと、画面上のピクセルを取得する方法がありません。私は何が欠けているのですか?一口... – dugla

+0

あなたは軽度のエラーをキャッチしていますが、重大なエラーは__heがこの_を行うことはできません、このアプローチは無効です。 '[context renderBufferStorage]'は明らかに内部的に何かを行います。なぜならレンダリングが機能しないためです。 – bobobobo

5

、あなたは色の添付ファイルをバインドするglRenderBufferStorageを使用することはできません、あなたはEAGLContext上からストレージを要求する必要がありますビューレイヤー。これはあなたが

関連する問題