大佬教程收集整理的这篇文章主要介绍了ios – 如何使用openGL上下文设置CAEAGLLayer子类:当前绘制帧缓冲区无效,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
- (id)init { self = [super init]; if (self) { self.opaque = YES; _glContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; NSAssert([EAGLContext setCurrentContext:_glContext],@""); glGenRenderbuffers(1,&_colorRenderBuffer); glBindRenderbuffer(GL_RENDERBUFFER,_colorRenderBuffer); [_glContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:self]; glGenFramebuffers(1,&_framebuffer); glBindFramebuffer(GL_FRAMEBUFFER,_framebuffer); glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_RENDERBUFFER,_colorRenderBuffer); /// . . .
到目前为止,一切似乎都很好.但是,然后我尝试创建一个带有“pass-thru”顶点/片段着色器对的着色器程序,并且在链接程序时没有返回任何错误,验证失败说:“当前绘制帧缓冲区无效.”
链接和验证着色器程序的代码(在附加着色器之后)看起来像这样,以防万一:
- (BOOL)linkAndValidateProgram { GLint status; glLinkProgram(_shaderProgram); #ifdef DEBUG GLint infoLogLength; GLchar *infoLog = NULL; glGetProgramiv(_shaderProgram,GL_INFO_LOG_LENGTH,&infoLogLength); if (infoLogLength > 0) { infoLog = (GLchar *)malloc(infoLogLength); glGetProgramInfoLog(_shaderProgram,infoLogLength,&infoLogLength,infoLog); NSLog(@"Program link log:\n%s",infoLog); free(infoLog); } #endif glGetProgramiv(_shaderProgram,GL_LINK_STATUS,&status); if (!status) { return NO; } glValidateProgram(_shaderProgram); #ifdef DEBUG glGetProgramiv(_shaderProgram,infoLog); NSLog(@"Program validation log:\n%s",GL_VALIDATE_STATUS,&status); if (!status) { return NO; } glUseProgram(_shaderProgram); return YES; }
我想知道在整个CAEAGLLayer生命周期的某个时刻是否可能有一些额外的设置,我可能不知道并且可能会尝试在init中设置GL而跳过?
更新:我目前最好的想法是,不是在init上强加一个大小(为了测试的目的而工作得很好但是很好的hacky),我应该在层改变大小时重新设置缓冲存储.所以我重写-setBounds:像这样:
- (void)setBounds:(CGRect)bounds { [super setBounds:bounds]; [_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:self]; glGetRenderbufferParameteriv(GL_RENDERBUFFER,GL_RENDERBUFFER_WIDTH,&someVariableToHoldWidthIfYouNeedIt); glGetRenderbufferParameteriv(GL_RENDERBUFFER,GL_RENDERBUFFER_HEIGHT,&someVariableToHoldHeightIfYouNeedIt); }
以上是大佬教程为你收集整理的ios – 如何使用openGL上下文设置CAEAGLLayer子类:当前绘制帧缓冲区无效全部内容,希望文章能够帮你解决ios – 如何使用openGL上下文设置CAEAGLLayer子类:当前绘制帧缓冲区无效所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。