I’m creating a 3D OpenGL ES view on the iPhone and want to set up a depth buffer, so I can use it. I’m calling glEnable(GL_DEPTH_TEST) and such, but because I haven’t set up the z-buffer, it does nothing.
I’m looking for an equivalent call to
glutInitDisplayMode(GLUT_DEPTH)
Any help would be most welcome. Thanks!
As you suspect, you’ve no depth buffer. You’ll need to attach a depth buffer to your frame buffer in whatever UIView subclass you’ve created that uses a
CAEAGLLayeras its layer.Supposing you’re working with Apple’s OpenGL ES Xcode template, the relevant UIView subclass is EAGLView. There’s a method in there, createFramebuffer, that is responsible for creating the frame buffer. Initially it’ll say:
What that does is generates and binds a frame buffer, then it generates and binds a colour render buffer, gifts the colour buffer the inherent storage that comes with a CAEAGLLayer, grabs the frame dimensions for later and attaches the colour buffer to the render buffer.
You need also to create and attach a depth buffer. Which should be as simple as (with a suitable instance variable added for depthRenderbuffer; typing directly in here):
Which does what it looks like it does — generates and binds a render buffer, allocates it storage to be a 16bit depth buffer of the same dimensions as the colour buffer and then attaches it to the frame buffer.
So, in total (untested):