2015-09-24 3 views
0

Я делаю некоторые фракталы glsl, и я хотел бы сделать подсчеты заклада, если они задерживаются слишком долго, чтобы поддерживать скорость кадров (без необходимости выяснять, что хорошо для каждого существующего устройства и любых будущих) ,Могу ли я сделать поручение glsl из цикла, когда он работает слишком долго?

Было бы неплохо, если бы таймер я мог проверить каждые 10 итераций или что-то ....

В случае неудачи, кажется, лучший подход может отслеживать, сколько времени потребовалось, чтобы сделать предыдущий кадр (или предыдущие N кадров) и динамически изменить число «итерации» на единицу ...?

Или какое-либо другое предложение? :)

+0

Выполняется ли на каждой итерации постоянное время? – jtbandes

+0

Каждый пиксель в фрактале рассчитывается, чтобы увидеть, «ускользает». Значение цвета - это то, сколько раз функция повторялась до того, как она сбежала. Таким образом, каждый пиксель собирается итерировать неизвестное количество раз (или до тех пор, пока не будет спасение из-за времени, по существу). Это все происходит * каждый проход * шейдера. Если это имеет смысл? Если графический процессор достаточно быстр, чтобы вычислить функцию 256 раз в 30 мс, это удивительно. Если это не так, я хотел бы отскочить назад. –

+1

Это имеет смысл, я написал это раньше :) Но вы могли бы просто ограничить количество итераций. Я полагаю, что процессор может нести ответственность за проверку того, сколько времени занимает весь фрейм, если это достаточно хорошо. – jtbandes

ответ

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, и более оптимистично приподнятым, чем уменьшилась, и проталкивается в качестве униформы в «гл называет здесь» раздел.