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