c# - 在iOS 5上使用MonoTouch不能使用OpenGL ES 1.1深度缓冲区

标签 c# ios opengl-es xamarin.ios depth-buffer

我无法在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);
}

它仍然无法正常工作。您是否知道如何使深度缓冲区工作?我想念什么吗?

最佳答案

感谢发布的NeHe-Lesson holmes,我找到了一个解决方案:我使用“OpenTK.Graphics.ES20.GL”中的方法,而不是“OpenTK.Graphics.ES11.GL.Oes”中的方法来创建深度缓冲区。创建缓冲区后,我可以在程序的其余部分中使用“OpenTK.Graphics.ES11”中的标准OpenGL 1.1方法。这是代码:

OpenTK.Graphics.ES20.GL.GenRenderbuffers (1,ref depthRenderBuffer);
OpenTK.Graphics.ES20.GL.BindRenderbuffer (OpenTK.Graphics.ES20.All.Renderbuffer, depthRenderBuffer);
OpenTK.Graphics.ES20.GL.RenderbufferStorage (OpenTK.Graphics.ES20.All.Renderbuffer, OpenTK.Graphics.ES20.All.DepthComponent16, Size.Width, Size.Height);
OpenTK.Graphics.ES20.GL.FramebufferRenderbuffer (OpenTK.Graphics.ES20.All.Framebuffer, OpenTK.Graphics.ES20.All.DepthAttachment, OpenTK.Graphics.ES20.All.Renderbuffer, depthRenderBuffer);

关于c# - 在iOS 5上使用MonoTouch不能使用OpenGL ES 1.1深度缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11284499/

相关文章:

ios - 如何在键盘已经打开的情况下呈现 JSQMessagesViewController?

iphone - 将自定义中心按钮添加到标签栏的最佳方式是什么?

ios - 用glDrawArray绘图

c# - 在命令 shell 中退出 WPF 应用程序

c# - 如何将Json对象转换为Web服务中的自定义类对象?

c# - 有没有一种方法可以引用链中的最后一个表达式以用作函数中的参数(C#)

c# - 在 C# 中解析参数

ios - 在 AppDelegate 中运行 CKQuery - 等待完成

iphone - 将 UIView 的内容渲染为 OpenGL 纹理