2017-06-20 57 views
0

我有一個自定義視圖象下面這樣:爲什麼我的自定義視圖不可見?

@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 

但是,當我Init這視圖和控制器的視圖添加它,我看不到我的自定義視圖。當我使用視圖層次結構進行調試時,自定義視圖實際上位於頂部。 誰能告訴我爲什麼?

+0

嘗試** [self.view bringSubViewToFront:yourCustomView]; **在你的ViewController – Rohan

+0

@Rohan它不會改變任何東西。實際上,我的自定義視圖已經位於視圖層次結構中的索引0處,但它看起來很透明。這是很奇怪的,因爲我把圖層的「不透明」設置爲「YES」。所以我很困惑。 – Cr02y

+0

你的隱形是什麼意思?看看你的代碼,似乎你可能會錯過對glViewport的調用。 –

回答

1

您應使用glGetError()來檢查代碼中的錯誤。這會幫助你至少查明問題。

通過這樣做,我發現你的錯誤其實很小。綁定渲染緩衝區時,您正在調用glBindBuffer。您需要使用glBindRenderbuffer所以只需更換

glBindBuffer(GL_RENDERBUFFER, _colorRenderBuffer); 

glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderBuffer); 
相關問題