CoreImage:EAGLContext 帧缓冲区或渲染缓冲区配置不正确

发布于 2025-01-05 07:17:27 字数 812 浏览 0 评论 0原文

当我设置 GLKViewController/GLKView 来使用 CoreImage 进行绘图时,我有时会在标题中收到通知。

设置如下所示:

_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

self.view.context = _context;
self.view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
self.view.backgroundColor = UIColor.blackColor;
self.view.contentScaleFactor = UIScreen.mainScreen.scale;

glGenRenderbuffers(1, &_render_buffer);
glBindRenderbuffer(GL_RENDERBUFFER, _render_buffer);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);

_core_image_context = [CIContext contextWithEAGLContext: _context];

[EAGLContext setCurrentContext:_context];

我在 GLKView 中有 UIKit 子视图,似乎当我添加/删除视图时,它会以某种方式暂时使上下文无效。 问题是(除了在极少数情况下我仍然需要角落)我可以毫无麻烦地在上下文中绘制下一个更新。

如果失败,我可以重试绘图,但我如何知道上下文无效?我该如何检测它或防止它失效?

When I setup a GLKViewController/GLKView for drawing with CoreImage I sometimes get the notice in the title.

The setup looks like this:

_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

self.view.context = _context;
self.view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
self.view.backgroundColor = UIColor.blackColor;
self.view.contentScaleFactor = UIScreen.mainScreen.scale;

glGenRenderbuffers(1, &_render_buffer);
glBindRenderbuffer(GL_RENDERBUFFER, _render_buffer);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);

_core_image_context = [CIContext contextWithEAGLContext: _context];

[EAGLContext setCurrentContext:_context];

I have UIKit subviews in the GLKView and it seems that when I add/remove views it somehow invalidate the context temporarily.
The thing is (except in some rare cases I still need to corner) the next update I can draw in the context without troubles.

I'm ok to retry drawing if it fails but how can I know that the context is invalid? How am I supposed to detect it or prevent it from being invalidated?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

再可℃爱ぅ一点好了 2025-01-12 07:17:27

GLKView 设置并管理渲染缓冲区。通过显式调用 glGenRenderBuffers()glBindRenderbuffer(),您会混淆 GLKView 的配置。

A GLKView sets up and manages the render buffer. By explicitly calling glGenRenderBuffers() and glBindRenderbuffer() you are confusing the GLKView's configuration.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文