:iOS5はGL_STENCIL_INDEXとGL_STENCIL_INDEX8の両方をサポートしていますか?次のコードで
GLuint viewRenderbuffer, viewFramebuffer, viewDepthbuffer, stencilBuffer;
// Create the framebuffer object
glGenFramebuffers(1, &viewFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, viewFramebuffer);
// Create a render buffer and bind it to the FBO.
glGenRenderbuffers(1, &viewRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, viewRenderbuffer);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &imageWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &imageHeight);
// Create a depth buffer and bind it to the FBO.
glGenRenderbuffers(1, &viewDepthbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, viewDepthbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, imageWidth, imageHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, viewDepthbuffer);
// Create a stencil buffer to crop the rendered scene and bind it to the FBO.
glGenRenderbuffers(1, &stencilBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, stencilBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX, imageWidth, imageHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, stencilBuffer);
// Check the FBO.
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
NSLog(@"Failure with framebuffer generation: %d", glCheckFramebufferStatus(GL_FRAMEBUFFER));
}
GL_STENCIL_INDEX
では、私はGL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
エラーを取得します。 GL_STENCIL_INDEX8
では、GL_FRAMEBUFFER_UNSUPPORTED
というエラーが発生します。どちらも最後のglFramebufferRenderbuffer()関数によって発生します。この関数は、ステンシルバッファをFBOにバインドする必要があります。
さらに、GL_RENDERBUFFER_STENCIL_SIZE
の値をチェックすると、GL_STENCIL_INDEX8
で正しい値(8)が得られますが、GL_STENCIL_INDEX
で0が得られます。
これで、ステンシルバッファを備えた機能的で完全なFBOを取得できません。 GL_STENCIL_INDEX
が原因ですか?どちらを使うべきですか?
として埋め込まれた深さ/ステンシルバッファは拡張である、私はGL_DEP TH24_STENCIL8_OES。このように動作します。おかげさまで、JimN氏に感謝します。 –
「プラットフォームノート」の「iOS向けOpenGL ESプログラミングガイド」の「PowerVR SGXのリリースノートとベストプラクティス」というタイトルの下で、 iOS 4.0以降では、別のステンシルバッファはサポートされていません。深度/ステンシルバッファを組み合わせて使用してください。 " PowerVR MBXにも当てはまるのかどうかは分かりませんが、iPhone 3GはXcode 4.5以降でサポートされていないので、それは議論の対象です。 – bleater