我無法使用iOS 5上的MonoTouch獲取深度緩衝區。我使用標準MonoTouch「OpenGL Application」模板並添加了此代碼以測試深度緩衝器(OpenGL ES的1.1):OpenGL ES 1.1深度緩衝區無法在iOS 5上使用MonoTouch工作
GL.Enable(All.DepthTest);
GL.DepthFunc(All.Greater);
GL.DepthMask(true);
// Shape A
GL.DrawArrays (All.TriangleStrip, 0, 4);
// Shape B (should be behind Shape A)
GL.Translate (.5f,.5f,.5f);
GL.DrawArrays (All.TriangleStrip, 0, 4);
// Shape C (should be in front of Shape A)
GL.Translate (-1f,-1f,-1f);
GL.DrawArrays (All.TriangleStrip, 0, 4);
兩種形狀B和C被繪製的形狀A.同樣的事情發生,即使 「GL.DepthFunc(All.Never)」 的前面。深度緩衝區完全被忽略。我也試過手動創建一個深度緩存(而不是依靠的MonoTouch/OpenTK「iPhoneOSGameView」創造一個對我來說)使用此代碼:
protected override void CreateFrameBuffer()
{
base.CreateFrameBuffer();
uint depthbuffer=0;
GL.Oes.GenRenderbuffers (1, ref depthbuffer);
GL.Oes.BindFramebuffer (All.RenderbufferOes, depthbuffer);
GL.Oes.RenderbufferStorage (All.RenderbufferOes, All.DepthComponent16Oes, (int) 768, (int) 1024);
GL.Oes.FramebufferRenderbuffer (All.FramebufferOes, All.DepthAttachmentOes, All.RenderbufferOes, depthbuffer);
}
它仍然沒有工作。你有什麼想法如何讓深度緩衝區工作?我錯過了什麼嗎?
感謝您的鏈接!這非常有幫助。我通過使用「OpenTK.Graphics.ES20.GL」中的方法而不是「OpenTK.Graphics.ES11.GL.Oes」中的方法來創建深度緩衝區。在創建緩衝區之後,我可以在「OpenTK.Graphics.ES11」中使用標準的OpenGL 1.1方法來執行我的程序的其餘部分。 – Heiko