Opengl es 为什么glBindFramebuffer(GL_FRAMEBUFFER,0)会导致cocos2D iphone出现黑屏?
[iPad-3]-[iOS 5.0]-[Objective-C]-[XCode 4.3.3]-[Cocos2D]-[openGL|ES 2.0] 我正在学习如何使用openGL | ES 2.0,并偶然发现了帧缓冲区对象(FBO) 信息: 我正在使用Cocos2D,它对绘图有很多额外的奇特处理。我想这可能与这个问题有关。如果cocos的“默认”帧缓冲区与绘制到屏幕的实际默认帧缓冲区不同,这可能会导致错误绘制 我的问题: 在我的“helloworld.m”类的init函数中,如果我将“glBindFrameBuffer(GL_FRAMEBUFFER,0);”放在任何地方,我只会得到一个空白屏幕Opengl es 为什么glBindFramebuffer(GL_FRAMEBUFFER,0)会导致cocos2D iphone出现黑屏?,opengl-es,screen,opengl-es-2.0,framebuffer,Opengl Es,Screen,Opengl Es 2.0,Framebuffer,[iPad-3]-[iOS 5.0]-[Objective-C]-[XCode 4.3.3]-[Cocos2D]-[openGL|ES 2.0] 我正在学习如何使用openGL | ES 2.0,并偶然发现了帧缓冲区对象(FBO) 信息: 我正在使用Cocos2D,它对绘图有很多额外的奇特处理。我想这可能与这个问题有关。如果cocos的“默认”帧缓冲区与绘制到屏幕的实际默认帧缓冲区不同,这可能会导致错误绘制 我的问题: 在我的“helloworld.m”类的init函数中,如果我将“glBind
-(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,即可将绘制到屏幕的默认FRAMEBUFFER应用于屏幕 问题在于iOS或Cocos2D(或两者)都可以具有唯一的帧缓冲区。 该唯一帧缓冲区的句柄将不同于0,并且每次都可能不同 要解决这个问题,我必须抓取当前FBO的句柄,执行自定义帧缓冲区操作,然后在完成后重新应用FBO的句柄。
创建一个变量以引用原始帧缓冲区对象
GLint oldFBO;
将当前使用的FBO句柄(即“闪烁”)分配给变量“oldFBO”
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO);
//here is when you would create or manipulate custom framebuffers.//
之后,将原始FBO设置为当前帧缓冲区
glBindFramebuffer(GL_FRAMEBUFFER, oldFBO);
我看你是新来的。欢迎表示你的问题已经解决的方法是接受答案,而不是把答案放在问题中,并在标题中加上“已解决”一词。发布并接受自己问题的答案是完全可以的。(你可能需要等待几个小时才能完成这项工作;对新用户有一些临时限制。)我不知道做(已解决的)事情是不礼貌的。我已经看过很多次了,所以我认为这就是pplz为自己所做的。我试着回答自己,等了8个小时。我在工作,对这些事情没有耐心。我现在编辑,明天再试一次,以便做出答案。如果它仍然不起作用,那么我就离开它;如前所述,这意味着你没有解决问题的办法。这让我发疯了。。。谢谢你救了我!啊!在这白痴面前损失了半天。。。非常感谢你提供的重要线索。