Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es 为什么glBindFramebuffer(GL_FRAMEBUFFER,0)会导致cocos2D iphone出现黑屏?_Opengl Es_Screen_Opengl Es 2.0_Framebuffer - Fatal编程技术网

Opengl es 为什么glBindFramebuffer(GL_FRAMEBUFFER,0)会导致cocos2D iphone出现黑屏?

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

[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);”放在任何地方,我只会得到一个空白屏幕

-(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个小时。我在工作,对这些事情没有耐心。我现在编辑,明天再试一次,以便做出答案。如果它仍然不起作用,那么我就离开它;如前所述,这意味着你没有解决问题的办法。这让我发疯了。。。谢谢你救了我!啊!在这白痴面前损失了半天。。。非常感谢你提供的重要线索。