2017-02-16 127 views
0

模板缓存的glDrawElements结果我有一个使用GLKViewController iOS应用程序,我成立了渲染缓冲如下:GLKView在黑屏

@interface RootViewController : GLKViewController<UIKeyInput>

- viewDidLoad { 
    [super viewDidLoad]; 

    _context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 

    GLKView* view = (GLKView*)self.view; 
    view.context = _context; 
    view.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888; 
    view.drawableDepthFormat = GLKViewDrawableDepthFormat24; 
    view.drawableStencilFormat = GLKViewDrawableStencilFormat8; 
    view.drawableMultisample = GLKViewDrawableMultisampleNone; 
    self.preferredFramesPerSecond = 60; 

    [EAGLContext setCurrentContext:_context]; 
} 

然而,当我打电话平局后来:

glDrawElements(getGlPrimitiveType(ePrimType), numIndis, GL_UNSIGNED_SHORT, startIndis);

它导致黑屏并在Capture GPU Frame,这个错误显示出来:

Your app rendered with STENCIL_TEST enabled into a framebuffer without an attached stencil buffer.

有什么,我错过了什么?

我记得由于深度测试之前有同样的问题,我与view.drawableDepthFormat = GLKViewDrawableDepthFormat24;将其固定到viewDidLoad我不知道有关模板测试,苹果公司的文档或者是很小的或非常一般以理论四周(即:漂亮很无用)。

回答

0

我找到了罪魁祸首,

我已经GLKView失去了原有的FBO-ID已经准备时,我不渲染到纹理:

uint m_nFboId; 
glGenFramebuffers(1, &m_nFboId); 
glBindFramebuffer(GL_FRAMEBUFFER, m_nFboId); 

然后,当我尝试重置回到原来FBO-ID:

GLint defaultFBO; 
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO); 

这里,defaultFBO是之前产生的m_nFboId值。所以解决的办法是在操作之前,要么将其备份,或致电回[GLKView bindDrawable];