Функция Render
требует многократного выполнения, прежде чем ее вызовут только один раз (она используется для сбора входных данных). Я мог бы принудительно вызывать функцию Render
каждый раз, и это не будет нарушать код, но в конечном итоге это будет очень медленно.
Задержанное обновление вызывается много раз за пределами холста (не всегда), время или последовательность этих вызовов не могут быть известны.
Предполагается, что я не могу контролировать скорость кадров для функции OnFrame
.
Есть ли лучший способ, без , использующий таймеры или события, перекрасить мой холст после завершения сбора данных?
Вот что я получил до сих пор:
// called in many places
canvas.InputData( x );
// ---------------------- Canvas class -------------------
data = new Dictionary();
InputData( key, x )
{
data[ key ] = x;
Delayed_Render();
}
_counter = 0;
_request = false;
_delayed = false;
_complete = false;
Delayed_Render()
{
if( _request || ! _complete ) return;
_request = true;
_complete = false;
}
override OnFrame()
{
if( ++ _counter < 10 ) return;
_counter = 0;
if( _request )
{
_request = false;
_delayed = true;
Render();
}
}
override OnResize()
{
Render();
}
Render()
{
// ....................................
// code to render canvas using the data
// ....................................
if( _delayed )
{
_complete = true;
_delayed = false;
}
}