加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

opengl-es – 为什么glBindFramebuffer(GL_FRAMEBUFFER,0)会在co

发布时间:2020-12-14 17:30:12 所属栏目:百科 来源:网络整理
导读:[iPad-3] – [iOS 5.0] – [Objective-C] – [XCode 4.3.3] – [Cocos2D] – [openGL | ES 2.0] 我正在学习如何使用OpenGL | ES 2.0,并且绊倒了帧缓冲区对象(FBO) 信息: 我正在与Cocos2D合作,这对于绘图有着非常多的花哨的处理.我想这可能与这个问题有关.如
[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即可应用绘制到屏幕的默认帧缓冲区.

问题是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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读