0

画面をテクスチャにレンダリングして、アプリケーションに戻ったときにテクスチャを画面に「貼り付ける」ことができるようにします。現在、私のアプリでは、kEAGLDrawablePropertyRetainedBackingをTRUEに設定して波形を描画しています。動作しますが、アプリを辞めてまた戻ってきた後、画面がクリアされます。kEAGLDrawablePropertyRetainedBackingでのこの通常の動作はTRUEですか?アプリケーションに戻ったときに、fpsですべてを再描画する余裕はありません。

私はすでにこれに遭遇しました:OpenGL ESで画面コンテンツを保存して再描画する方法と私のニーズに答えを適用しようとしていますが、まだ問題があります。

他の質問の答えを参考にして、これが私がそれをやろうとした方法です。

@property (nonatomic) GLuint framebuffer;
@property (nonatomic) GLuint texture;

glkviewcontrollerにロードする際のコード。

- (void)viewDidLoad  {

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillResignActive) name:UIApplicationWillResignActiveNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillTerminate) name:UIApplicationWillTerminateNotification object:nil];

    glGenFramebuffers(1, &_framebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER_OES, _framebuffer);


    glGenTextures(1, &_texture);

    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, _texture);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 768, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

    glBindTexture(GL_TEXTURE_2D, 0);
    glDisable(GL_TEXTURE_2D);
.....

このviewControllerにアプリが辞任していることが通知されたら、次の関数を使用します。

 -(void)appWillResignActive
{
    glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, _texture, 0);
    if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)
        NSLog(@"Error!");
}

上記のステータスを確認した後もエラーが発生します。ここでの問題は何でしょうか?私はOpenGLESにかなり慣れていないので、これが初心者の質問である場合はご容赦ください。ありがとう。

4

1 に答える 1

0

コンテキストの初期化の前に、上記のテクスチャとフレームバッファのバインディングを試みていたことは気にしないでください。

    // Create an OpenGL ES 2.0 context and provide it to the
    // view
    view.context = [[AGLKContext alloc]
                    initWithAPI:kEAGLRenderingAPIOpenGLES2];
    view.delegate = self;

   // Make the new context current
   [AGLKContext setCurrentContext:view.context];

この後にコードを配置すると、チェックを通過できます。

于 2013-02-09T15:54:46.770 に答える