10

[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);」フレームバッファを0に設定するだけで、画面に描画されるデフォルトのフレームバッファが適用されます。

4

1 に答える 1

26

問題は、iOSまたはCocos2Dのいずれか(または両方)が一意のフレームバッファーを持つことができるということでした。その一意のフレームバッファのハンドルは0とは異なり、毎回異なる場合があります。

これを解決するには、現在のFBOのハンドルを取得し、カスタムのフレームバッファー処理を実行してから、完了後にFBOのハンドルを再適用する必要があります。

元のフレームバッファオブジェクトを参照する変数を作成します

GLint oldFBO;

現在使用されているFBOのハンドル(「GLint」)を変数「oldFBO」に割り当てます

glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO);

//here is when you would create or manipulate custom framebuffers.//

その後、元のFBOを現在のフレームバッファとして設定します

glBindFramebuffer(GL_FRAMEBUFFER, oldFBO);
于 2012-07-24T17:17:52.193 に答える