我无法在 iOS 5 上使用 MonoTouch 使深度缓冲区工作。我正在使用标准的 MonoTouch“OpenGL 应用程序”模板并添加此代码来测试深度缓冲区(OpenGL ES 1.1):
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);
}
它仍然无法正常工作。你知道我怎样才能让深度缓冲区工作吗?我错过了什么吗?