触摸事件似乎发生在与 OpenGL 渲染不同的线程上。是这样吗?这个问题的上下文是我正在构建的一个粒子系统,它使用触摸事件来触发 OpenGL 绘图。由于 OpenGL 绘图是相当重量级的,我担心线程的影响。
任何见解将不胜感激。
问候,道格
触摸事件似乎发生在与 OpenGL 渲染不同的线程上。是这样吗?这个问题的上下文是我正在构建的一个粒子系统,它使用触摸事件来触发 OpenGL 绘图。由于 OpenGL 绘图是相当重量级的,我担心线程的影响。
任何见解将不胜感激。
问候,道格
没有。相同的线程。
您将命令提交给 OpenGL 子系统,然后它们在 GPU 上执行,因此不是“根据定义”并行线程 b/c,图形处理器不一定具有与 CPU 相同的线程概念。
默认的 OpenGL 项目只是创建一个 NSTimer,它每帧在主线程上触发并调用 OpenGL。
您可能观察到的是大多数绘图命令都是异步的。由于您在 iPhone 上绘制到屏幕外缓冲区,因此只有在完成绘制后交换缓冲区时才能看到结果:
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
除非您另有说明,否则您的代码将在主线程上运行。话虽如此,一些库/SDK 调用会启动它们自己的单独线程。通过这种方式,您可能会间接创建其他线程。
至于你的具体情况,我的中奖经验不匹配。触摸事件在主线程上处理,openGL 也是如此。