我想将我的屏幕渲染为纹理,这样当我再次回到应用程序时,我就可以将纹理“粘贴”到屏幕上。目前在我的应用程序中,我正在绘制一个将 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!");
}
检查上述状态后,我仍然收到错误消息。这里可能是什么问题?我对 OpenGL ES 很陌生,如果这是一个新手问题,请原谅我。谢谢。