gpt4 book ai didi

ios - Async GLKit 的 GLKViewController 替换(异步 OpenGL 绘图)

转载 作者:行者123 更新时间:2023-11-29 02:07:52 24 4
gpt4 key购买 nike

根据这个question and its answer GLKViewController 与异步 OpenGL 绘图模式并不真正兼容。

有没有人知道任何开源或代码示例重新实现 GLKViewController(UIViewController 子类)但具有更多手动控件以便它可以与异步绘图一起使用?

最佳答案

这个问题太宽泛了。您正在寻找具有更多手动控件的示例吗?您应该更具体地了解您要查找的内容。

我不知道有多少好的资源或示例可以实现与 View Controller 相对较高级别的东西,但我确实知道一些关于如何分离模块以对异步使用提供强大支持的非常好的过程iOS 上的 openGLES。

有关如何移植 GLKViewController 的详细说明,您应该列出您已经在使用的项目,或者更确切地说,您在网络上找不到答案的项目。不幸的是,我对同时使用 GLKViewControllerGLKView 的看法是“不要!”。

所以关于多线程的模块分离,我使用的是一个包装上下文的类,它用一个线程初始化,还可以选择使用另一个上下文包装器来支持上下文之间的共享。这个包装器的工作原理是,在包装器上调用的每个方法都被传递到包装器绑定(bind)到的线程上执行。此外,它还包含方法 performBlock:performBlock:callback:,它们将在绑定(bind)线程上执行该 block ,并可选择在完成后调用另一个 block 。

从这里开始,这个包装器被进一步子类化以包含当前上下文状态(用于优化),包括加载的着色器池(缓存)和加载的纹理池(缓存)。共享包装器还链接到创建它们的父级,因此只有父级包含池。

所以在后台加载纹理的过程看起来像这样:

  • 仅从 mainContext 开始
  • 创建一个newThread
  • mainContextnewThread 创建一个 sharedContext
  • 请求mainContext创建一个texture(只是为了获取ID)
  • 完成后请求 sharedContext 将纹理数据加载到 texture 并在完成时通知 mainContext
  • texture 做你想做的事并删除 sharedContext 或者保留它以备后用。

现在我希望您可以看到,通过此过程您可以轻松地创建一个更高级别的系统,对于最常见的情况,您将创建一个包含两个上下文包装器的类,即主上下文和后台 worker 。这种类型的系统应该非常容易维护,从使用的角度来看,您永远不需要担心多线程。

之后为了接近 GLKViewController 我有一个包含帧缓冲区和渲染缓冲区的类,它使用 UIView 进行初始化以显示或使用生成纹理并用于 FBO 系统的大小。因此,拥有一个包含此类和上下文包装器的 View Controller 可能是一个非常强大的工具,您可能需要这种工具。

如果您选择实现此类系统并遇到任何问题,我很乐意听到它并为您提供帮助,或者更愿意听到您的成功。

关于ios - Async GLKit 的 GLKViewController 替换(异步 OpenGL 绘图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29604055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com