opengl-es – 为什么glBindFramebuffer(GL_FRAMEBUFFER,0)会在co
[iPad-3] – [iOS 5.0] – [Objective-C] – [XCode 4.3.3] – [Cocos2D] – [openGL | ES 2.0]
我正在学习如何使用OpenGL | ES 2.0,并且绊倒了帧缓冲区对象(FBO) 信息: 我的问题: -(id) init { if( (self=[super init])) { CGSize winSize = [CCDirector sharedDirector].winSize; glBindFramebuffer(GL_FRAMEBUFFER,0); CCSprite * spriteBG = [[CCSprite alloc] initWithFile:@"cocos_retina.png"]; spriteBG.position = ccp(512,384); //[self addChild:spriteBG z:1]; [self scheduleUpdate]; _mTouchDown = NO; _mSprite = [CCSprite spriteWithTexture:_mMainTexture]; _mSprite.position = ccp(512,384); [self addChild:_mSprite]; self.isTouchEnabled = YES; } return self;} 我是否缺少一些基本和明显的东西? 据我所知,功能“glBindFramebuffer(GL_FRAMEBUFFER,0);”只需将Framebuffer设置为0即可应用绘制到屏幕的默认帧缓冲区.
问题是iOS或Cocos2D(或两者都可以)具有唯一的帧缓冲区.
该唯一帧缓冲区的句柄将不同于0,每次可能不同. 要解决这个问题,我必须抓住当前的FBO手柄,做自定义的Framebuffer的东西,然后在完成之后重新应用FBO的句柄. 创建一个引用原始帧缓冲区对象的变量 GLint oldFBO; 将当前使用的FBO的句柄(这是一个“GLint”)分配给变量“oldFBO” glGetIntegerv(GL_FRAMEBUFFER_BINDING,&oldFBO); //here is when you would create or manipulate custom framebuffers.// 之后,您将原始的FBO设置为当前的Framebuffer glBindFramebuffer(GL_FRAMEBUFFER,oldFBO); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |