Синхронизировать drawRect для ViewController - PullRequest
0 голосов
/ 02 мая 2018

У меня есть класс контроллера представления, который анализирует кадры клипа и отображает его в NSOpenGLView. Проблема в том, что визуализируемые кадры нестабильны, так как кажется, что контроллер представления указывает представлению рисовать быстрее, чем он мог бы обработать. См. Фрагмент кода ниже для справки:

// Snippet code from view controller
- (void) tellViewToDrawWithFrameAtTimeInterval:(float)timeVal
{
    _myGlobalTimer = [NSTimer scheduledTimerWithInterval:timeVal
                                                  target:self                                  
                                selector:@selector(triggerRenderAtTime)
                                userInfo:nil
                                 repeats:YES];

}

- (void) triggerRenderAtTime
{
    [_myView setPixelData:[_myPixelBuffer objectAtIndex:_frameIndex];
    [_myView setNeedsDisplay:YES];

    _frameIndex++;
}

// The NSTimer object is eventually killed elsewhere in the class' implementation

Я даже пытался установить таймер на вызов с интервалами 3, 5, 10 секунд, чтобы убедиться, что у представления есть время, чтобы обработать все и отобразить кадр. Тем не менее, наблюдаемые результаты были все те же - вид все еще пропускает кадры, которые он должен рисовать. В настоящее время я смотрю на CVDisplayLink, но я очень незнаком с тем, что они еще делают, и, исходя из того, что я прочитал до сих пор, кажется, что это сложное решение в противном случае простой проблемы ( Я думаю, ... ). Кто-нибудь может пролить свет на это? Спасибо!

1 Ответ

0 голосов
/ 03 мая 2018

Хорошо, я понял это, и мне пришлось полностью исключить drawRect и использовать CVDisplayLink для моего чертежа. Руководство Apple было идеально подходит для этого:

Технические вопросы и ответы QA1385 - Управление рендерингом OpenGL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...