我正在做一些glsl分形,如果他们花费太长时间来保持帧速率,我想让计算保释(不必弄清楚每个现有设备和未来的设备有什么用处) )。
如果有一个我可以检查每10次迭代的计时器,那就太好了....
如果不这样做,似乎最好的方法可能是跟踪渲染前一帧(或前N帧)所需的时间,并将“迭代到”数字动态地改为统一......?
还是其他一些建议? :)
答案 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”部分中作为制服推送。