当它运行的时间过长时,我可以将glsl保释出来吗?

时间:2015-09-24 07:23:17

标签: ios glsl glsles cadisplaylink

我正在做一些glsl分形,如果他们花费太长时间来保持帧速率,我想让计算保释(不必弄清楚每个现有设备和未来的设备有什么用处) )。

如果有一个我可以检查每10次迭代的计时器,那就太好了....

如果不这样做,似乎最好的方法可能是跟踪渲染前一帧(或前N帧)所需的时间,并将“迭代到”数字动态地改为统一......?

还是其他一些建议? :)

1 个答案:

答案 0 :(得分:1)

由于看起来没有好的方法在GPU中做到这一点,人们可以采用一种简单的方法来“调整”循环外“循环次数”之后的“保释”,每帧一次。

CFTimeInterval previousTimestamp = CFAbsoluteTimeGetCurrent();
// gl calls here
CFTimeInterval frameDuration = CFAbsoluteTimeGetCurrent() - previousTimestamp;
float msecs = frameDuration * 1000.0;
if (msecs < 0.2) {
    _dwell = MIN(_dwell + 16., 256.);
} else if (msecs > 0.4) {
    _dwell = MAX(_dwell - 4., 32.);
}

因此,我的“停留”保持在32到256之间,并且比下降更加乐观,并且在“gl calls here”部分中作为制服推送。