У меня есть сценарий WebGL, и набор параметров, которые я могу использовать, чтобы сбалансировать качество рендеринга и скорость. Я хотел бы показать сцену для пользователя так высоко, насколько я могу сделать качество, пока частота кадров не опустится ниже некоторого порога из-за этого. Чтобы достичь этого, мне нужно как-то измерить «текущую» частоту кадров в ответ на изменения качества.Измерение времени рендеринга
Но сцена статична, пока пользователь не взаимодействует с ней (например, вращающаяся камера с помощью мыши). Я не хочу, чтобы цикл повторял повторную визуализацию той же сцены все время, даже если ничего не изменилось. Я хочу прекратить рендеринг, если сцена перестает двигаться. Это означает, что я не могу просто усреднить время между последовательными кадрами, так как я не могу различать медленный рендеринг, и пользователь просто двигает мышью медленнее.
Я думал о рендеринге сцены несколько раз при запуске и судить о частоте кадров из этого. Но сложность сцены может со временем меняться из-за части сцены, видимой из текущей позиции камеры, или из-за взаимодействия пользователя за пределами холста. Поэтому мне нужно адаптировать качество, поскольку смена сцены сложна. Запуск цикла калибровки после каждого выпуска мыши, возможно, будет вариантом.
Я также подумал об использовании вызова finish
вместо вызова flush
для точного измерения времени рендеринга. Но пока я жду, пока GL закончит рендеринг, мое приложение будет по существу не отвечать на запросы, в частности, не сможет помещать в очередь события мыши. Поскольку я предполагаю, что рендеринг в идеале должен занимать все время между двумя кадрами с целевой частотой кадров, это, вероятно, будет довольно плохо. Я мог бы избежать использования finish
вместо flush
только в некоторых случаях, например, после выхода мыши.
Каков наилучший способ достижения нужной частоты кадров в приложении WebGL или для регулярного измерения времени рендеринга?
FYI: [отделка - только флеш в хроме] (http://stackoverflow.com/a/20810521/128511). – gman
@gman: Есть одна идея ... большое спасибо за эту ссылку! – MvG