2017-06-20 1 views
0

Ich habe eine benutzerdefinierte Ansicht wie unten:Warum ist meine benutzerdefinierte Ansicht unsichtbar?

@interface OpenGLCopy() { 
    CAEAGLLayer *_eaglLayer; 
    EAGLContext *_context; 
    GLuint _colorRenderBuffer; 
} 
@end 

@implementation OpenGLCopy 

#pragma mark - life cycle 
- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self setupLayer]; 
     [self setupContext]; 
     [self setupRenderBuffer]; 
     [self setupFrameBuffer]; 

     [self render]; 
    } 
    return self; 
} 


#pragma mark - override 
+ (Class)layerClass { 
    return [CAEAGLLayer class]; 
} 

#pragma mark - private helper 
- (void)setupLayer { 
    _eaglLayer = (CAEAGLLayer *)self.layer; 
    _eaglLayer.opaque = YES; 
} 

- (void)setupContext { 
    _context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 
    if (!_context) { 
     NSLog(@"failed to initialize OpenGLES 2.0 context"); 
     return ; 
    } 

    if (![EAGLContext setCurrentContext:_context]) { 
     NSLog(@"failed to set current OpenGL context"); 
     return ; 
    } 
} 


- (void)setupRenderBuffer { 
    glGenRenderbuffers(1, &_colorRenderBuffer); 
    glBindBuffer(GL_RENDERBUFFER, _colorRenderBuffer); 
    [_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer]; 
} 


- (void)setupFrameBuffer { 
    GLuint frameBuffer; 
    glGenFramebuffers(1, &frameBuffer); 
    glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer); 
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _colorRenderBuffer); 
} 


- (void)render { 
    glClearColor(0, 104.0/255.0, 55.0/255.0, 1.0); 
    glClearColor(1, 1, 1, 1); 
    glClear(GL_COLOR_BUFFER_BIT); 

    [_context presentRenderbuffer:GL_RENDERBUFFER]; 
} 

@end 

Aber wenn ich diese Ansicht init und in einer Ansicht der Controller hinzufügen, kann ich nicht meine benutzerdefinierte Ansicht sehen. Und wenn ich mit der Ansichtshierarchie debugge, ist die benutzerdefinierte Ansicht tatsächlich auf der Oberseite. Wer kann mir sagen, warum?

+0

Versuchen ** ersetzen [self.view bringSubViewToFront: yourCustomView]; ** in Ihrem Viewcontroller – Rohan

+0

@Rohan Es ändert nichts. Tatsächlich hat meine benutzerdefinierte Ansicht bereits den Index 0 in der Ansichtshierarchie, aber sie scheint transparent zu sein. Es ist so komisch, da ich die "undurchsichtige" Ebene auf "YES" gesetzt habe. Also bin ich verwirrt. – Cr02y

+0

Was meinst du mit unsichtbar? Mit Blick auf Ihren Code scheint es, als würden Sie einen Aufruf von glViewport verpassen. –

Antwort

1

Sie sollten auf Fehler in Ihrem Code mit glGetError() überprüfen. Dies würde Ihnen helfen, das Problem zumindest zu lokalisieren.

Dadurch habe ich festgestellt, dass Ihr Fehler tatsächlich sehr klein ist. Sie rufen glBindBuffer beim Binden des Renderpuffers auf. Sie müssen glBindRenderbuffer verwenden, so einfach

glBindBuffer(GL_RENDERBUFFER, _colorRenderBuffer); 

mit

glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderBuffer); 
Verwandte Themen