gpt4 book ai didi

opengl-es - 如何使 OpenGL 绘图与 UIKit 更新同步

转载 作者:行者123 更新时间:2023-12-03 11:00:46 24 4
gpt4 key购买 nike

在我们的应用程序中,我们在 CAEAGLLayer 上方有 UIScrollView。 UIScrollView 包含一些 UIViews(红色矩形)。在 CAEAGLLayer 中,我们绘制白色矩形。白色矩形的中心与红色矩形的中心相同。当 UIScrollView 滚动时,我们更新 CAEAGLLayer 中白色矩形的位置并渲染它们。

我们得到了预期的结果:白色矩形的中心总是与红色矩形的中心相同。

但是我们不能将 CAEAGLLayer 的更新与 UIScrollView 中 View 的移动同步。
我们有某种时间错误——红色矩形落后于白色矩形。

粗略地说,我们真的想让 CAEAGLLayer 和 UIScollView 一起滞后。

我们准备了示例代码。在设备上运行它并滚动,您会看到白色矩形(由 OpenGL 绘制)比红色矩形(常规 UIViews)移动得更快。 OpenGL 正在 scrollViewDidScroll: 委托(delegate)调用中更新。

https://www.dropbox.com/s/kzybsyu10825ikw/ios-opengl-scrollview-test.zip

即使在 iOS 模拟器中,它的行为也是一样的,只需看一下视频:http://www.youtube.com/watch?v=1T9hsAVrEXw

红色 = UIKit,白色 = OpenGL

代码是:

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
// reuses red squares that are gone outside thw bounds
[overlayView updateVisibleRect:CGRectMake(...)];
// draws white squares using OpenGL under the red squares
[openGlView updateVisibleRect:CGRectMake(...)];
}

编辑:

同样的问题可以很容易地在一个非常简化的示例中得到证明。可以在以下位置找到工作的 xcodeproj:

https://www.dropbox.com/s/vznzccibhlf8bon/simple_sample.zip

示例项目基本上在 OpenGL 中绘制和动画一组白色方 block ,并为一组红色 UIViews 做同样的事情。在红色和白色方 block 之间很容易看到滞后。

最佳答案

在 iOS 9 CAEAGLLayerpresentsWithTransaction使两者同步的属性。

关于opengl-es - 如何使 OpenGL 绘图与 UIKit 更新同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12967340/

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