画面をテクスチャにレンダリングして、アプリケーションに戻ったときにテクスチャを画面に「貼り付ける」ことができるようにします。現在、私のアプリでは、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にかなり慣れていないので、これが初心者の質問である場合はご容赦ください。ありがとう。