Отделение вызовов OpenGL от обновления на iPhone - PullRequest
2 голосов
/ 03 августа 2010

Я немного новичок, когда дело доходит до многопоточности, поэтому любые указатели в правильном направлении будут очень полезны. У меня есть игра с довольно тяжелой функцией обновления и довольно тяжелой функцией отрисовки. Я предполагаю, что большая часть веса в функции рисования будет происходить на GPU. Из-за этого я хотел бы начать вычисление обновления для следующего кадра, пока происходит рисование. Прямо сейчас мой игровой цикл довольно прост:

Game->Update1();
Game->Update2();
Game->Draw();

Update1() обновляет переменные, которые не изменяют состояние игры, поэтому она может работать независимо от Draw. То есть, между этими двумя не должно быть никаких столкновений за данные. Это также основная часть процессорной обработки.

Update2() обновляет переменные, которые нужны Draw, и это довольно быстро, поэтому кажется правильным запускать его последовательно с Draw(). Кроме того, я считаю, что функция Draw() невелика для процессора и тяжела для графического процессора.

Я хотел бы, чтобы в то время, когда графический процессор занят обработкой всех функций рисования, функция Update1 () следующего кадра может использовать ЦП, чтобы подготовить обновление следующего кадра. Не похоже, что я автоматически получаю эту функциональность - цикл Draw, кажется, занимает немного времени и блокирует все, пока это не будет сделано, что не идеально.

Какой правильный способ сделать это? Это уже происходит, и я просто не наблюдаю это должным образом?

1 Ответ

0 голосов
/ 03 августа 2010

Это зависит от того, что Draw () содержит, вы должны получить параллелизм CPU-GPU автоматически, если какой-то вызов внутри Draw () не синхронизируется между CPU и GPU. Один простой пример - использование glReadPixels.

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