Iphone 触摸事件和OpenGL绘图。它们发生在不同的线程上吗?

Iphone 触摸事件和OpenGL绘图。它们发生在不同的线程上吗?,iphone,opengl,iphone-sdk-3.0,Iphone,Opengl,Iphone Sdk 3.0,与OpenGL渲染相比,触摸事件似乎发生在不同的线程上。是这样吗?这个问题的背景是我正在构建的一个粒子系统,它使用触摸事件触发OpenGL绘图。由于OpenGL绘图相当繁重,我关心线程的含义 如有任何见解,将不胜感激 问候,, Doug除非您另外指定,否则代码将在主线程上运行。也就是说,一些库/SDK调用会启动它们自己的独立线程。通过这种方式,您可能间接地创建了其他线程 至于你的具体情况,我的经验与你不符。触摸事件在主线程上处理,就像openGL一样。否。同一条线 您向OpenGL子系统提交命令

与OpenGL渲染相比,触摸事件似乎发生在不同的线程上。是这样吗?这个问题的背景是我正在构建的一个粒子系统,它使用触摸事件触发OpenGL绘图。由于OpenGL绘图相当繁重,我关心线程的含义

如有任何见解,将不胜感激

问候,,
Doug

除非您另外指定,否则代码将在主线程上运行。也就是说,一些库/SDK调用会启动它们自己的独立线程。通过这种方式,您可能间接地创建了其他线程

至于你的具体情况,我的经验与你不符。触摸事件在主线程上处理,就像openGL一样。

否。同一条线

您向OpenGL子系统提交命令,然后在GPU上执行这些命令,因此“根据定义”不是并行线程b/c图形处理器不一定具有与CPU相同的线程概念

默认的OpenGL项目只是创建一个NSTimer,它在主线程上每帧触发一次并调用OpenGL

您可能观察到的是,大多数绘图命令都是异步的。由于您正在iPhone上绘制屏幕外的缓冲区,因此只有在完成绘制后交换缓冲区时才能看到结果:

    [context presentRenderbuffer:GL_RENDERBUFFER_OES];

等等,因为OpenGL是在GPU上运行的,而不是在CPU上运行的,所以它是在并行线程中运行的。drawView通常是从一个计时器调用的,我假设它只是向GPU发出信号,让GPU完成它的工作。你可以在任何涉及触摸事件的OpenGL应用程序中看到这一点。否则,渲染将挂起等待完成触摸序列。