私はiOS OpenGL ES Logical Buffer Loadsを読んで、それぞれの描画サイクルの後で深さバッファを "破棄"することでパフォーマンスが向上することを知りました。私はこれを試していますが、それは私のゲームエンジンがもうレンダリングされていないからです。次のサイクルをレンダリングしようとすると、glError 1286またはGL_INVALID_FRAMEBUFFER_OPERATION_EXTが表示されます。OpenGL ES 2.x:深度バッファを破棄する方法glDiscardFramebufferEXT?
私はそれを破棄しようとすると、深さのバッファを初期化または設定する必要があると感じますが、これに関する情報を見つけることはできません。
// Discard the depth buffer
const GLenum discards[] = {GL_DEPTH_ATTACHMENT, GL_COLOR_ATTACHMENT0};
glBindFramebuffer(GL_FRAMEBUFFER, m_depthRenderbuffer);
glDiscardFramebufferEXT(GL_FRAMEBUFFER,1,discards);
:ここ
// ---- GENERAL INIT ---- //
// Extract width and height.
int bufferWidth, bufferHeight;
glGetRenderbufferParameteriv(GL_RENDERBUFFER,
GL_RENDERBUFFER_WIDTH, &bufferWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER,
GL_RENDERBUFFER_HEIGHT, &bufferHeight);
// Create a depth buffer that has the same size as the color buffer.
glGenRenderbuffers(1, &m_depthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_depthRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24_OES, GAMESTATE->GetViewportSize().x, GAMESTATE->GetViewportSize().y);
// Create the framebuffer object.
GLuint framebuffer;
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, m_colorRenderbuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER, m_depthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_colorRenderbuffer);
そして、私は、各ドローサイクルの終わりにデプスバッファを破棄するために何をしようとしているされています。ここでは、私は(実際にはすべてのバッファ、)デプスバッファを初期化する方法であります
私はすぐに私の描画呼び出しのすべてと...
[m_context presentRenderbuffer:GL_RENDERBUFFER];
に任意のアイデアを、次のことを呼んで?誰かが私に指摘できる情報?私は主題(私が元の考えを持っていたところ)のAppleのガイドを通して読むことを試みました、http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html、それは私のためにかなり正しく動作していないようです。 GL_DEPTH_ATTACHMENT
とGL_COLOR_ATTACHMENT0
:glDiscardFramebufferEXT(GL_FRAMEBUFFER,1,discards)
へ
StuDev、おまえはそうだよ - 私は2番目の議論のために2の代わりに1を送っていた。さらに、GL_FRAMEBUFFERの破棄を実行していましたが、デプスバッファをインスタンス化するときにGL_RENDERBUFFERにバインドしていました(トリックを行った)。 – David
興味深い修正...私にとっては、深度バッファをGL_RENDERBUFFERにバインドする必要がありますが、廃棄するときはGL_FRAMEBUFFER列挙子を使用する必要があります。 – David