Jump to content

View more

Image of the Day

Inventory ! Va falloir trouver une autre couleur pour le cadre D: #AzTroScreenshot #screenshotsaturday https://t.co/PvxhGL7cOH
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

iOS: Depth Buffer Not Working

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
No replies to this topic

#1 blueshogun96   Members   


Posted 08 February 2013 - 09:27 PM

I don't know what's going on here, but right now, I can't get the depth buffer to work properly (that or I'm missing something really obvious).  I made a test example to verify that it works, but so far, no depth sorting is taking place.


I hate to just dump code and say "Hey, tell me what's wrong", but I've been struggling with this iOS stuff for a long time now, and never has OpenGL been so complicated.


From ViewController.m

- (void)viewDidLoad
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    // 1. Create an Xcode Project
    // 2. Create a Context
    EAGLContext *context = [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1] autorelease];
    [EAGLContext setCurrentContext:context];
    // 3. Create a View
    GLView *glView = [[[GLView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];
    [self.view addSubview:glView];
    GLuint depthBuffer;
    glGenRenderbuffers( 1, &depthBuffer );
    glBindRenderbuffer( GL_RENDERBUFFER, depthBuffer );
    glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 320, 480 );
    glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer );
    // 4. Create a Renderbuffer
    GLuint renderbuffer;
    glGenRenderbuffers(1, &renderbuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
    [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)glView.layer];
    // 5. Create a Framebuffer
    GLuint framebuffer;
    glGenFramebuffers(1, &framebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8_OES, 320, 480 );
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer);
    GLenum status = glCheckFramebufferStatus( GL_FRAMEBUFFER );
    if( status != GL_FRAMEBUFFER_COMPLETE )
        NSLog( @"Error completing FBO! %x", status );
    glEnable( GL_DEPTH_TEST );
    glDepthFunc( GL_LEQUAL );
    glClearDepthf( 1.0f );
    glDisable( GL_CULL_FACE );
    glDisable( GL_LIGHT0 );
    glViewport( 0, 0, 320, 480 );
    glMatrixMode( GL_PROJECTION );
    gluPerspective( 45.0f, 320.0f/480.0f, 0.1f, 1000.0f );
    glMatrixMode( GL_MODELVIEW );


And my test code


-(void) drawView:(id)sender
    glClearColor( 0.0f, 0.5f, 0.0f, 1.0f );
    glMatrixMode( GL_MODELVIEW );
    glTranslatef( 0.0f, 0.0f, -5.0f );
    float v[9] = { 0, 1.0f, 0,
                  1.0f, -1.0f, 0,
                 -1.0f, -1.0f, 0 };
    glEnableClientState( GL_VERTEX_ARRAY );
    glVertexPointer( 3, GL_FLOAT, 0, v );
    glColor4f( 1.0f, 0, 0, 0 );
    glDrawArrays( GL_TRIANGLES, 0, 3 );
    glTranslatef( 1, 0, -6.0f );
    glColor4f( 1.0f, 1.0f, 0, 0 );
    glDrawArrays( GL_TRIANGLES, 0, 3 );
    glDisableClientState( GL_VERTEX_ARRAY );
    [[EAGLContext currentContext] presentRenderbuffer:GL_RENDERBUFFER];


The second triangle should be behind the first, but it's not.  I ensured that depth testing was enabled, but this still happens.  Also, depending where I add the depth buffer initialization code, it will cause the screen to be solid white.  No idea what's wrong.  This sucks.  Any ideas?  Thanks.


EDIT: Nevermind, I fixed it by initializing the depth buffer last and re-binding the colour buffer.  That solved everything.

Edited by blueshogun96, 08 February 2013 - 09:50 PM.

Follow Shogun3D on the official website: http://shogun3d.net

Posted Image Posted Image Posted Image Posted Image

"Yo mama so fat, she can't be frustum culled." - yoshi_lol

"One objection to a “critique of C#” would be that you can’t talk about C# without talking about the whole “.Net experience”. However, one can approach the topic of Hitler without a complete discussion of Nationalist Socialism, so I feel justified." - Steve White.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.