Многопоточность OpenGL ES на iOS для игр - PullRequest
0 голосов
/ 02 марта 2012

В настоящее время у меня есть игровой цикл с фиксированным временным шагом, запущенный во втором потоке в моей игре.Контекст OpenGL находится в том же потоке, и рендеринг выполняется один раз за кадр после любых обновлений.Таким образом, основной «цикл» должен ждать рисования каждого кадра, прежде чем он сможет продолжить.На самом деле это не было проблемой, пока я не написал свою систему частиц.Более 1500+ частиц с шагом физики 16 мс приводят к падению частоты кадров чуть ниже 30, и это еще хуже.Рендеринг частиц больше нельзя оптимизировать без потери возможностей, поэтому я решил попробовать переместить OpenGL в 3-й поток.Я знаю, что это в некотором роде крайний случай, но я чувствую, что он сможет справиться с этим.

Я думал о запуске 2 циклов одновременно, один для основного шага (фиксированный временной шаг) и один для рисования(как бы быстро это ни шло).Однако вызовы рендеринга передают данные, которые могут меняться при каждом обновлении, поэтому я был обеспокоен тем, что блокировка замедлит его и сведет на нет преимущества.Тем не менее, после выполнения теста для этого, я просто получаю EXC_BAD_ACCESS менее чем за секунду времени выполнения.Я полагаю, потому что они пытаются получить доступ к одним и тем же данным одновременно?Я думал, что система автоматически обрабатывает это?

Когда я впервые изучал OpenGL на iPhone, у меня была настройка OpenGL в главном потоке, и я вызывал executeSelectorOnMainThread: withObject: waitUntilDone: с селектором рендеринга, и эти ошибкипроизойдет в любое время, когда waitUntilDone будет ложным.Если бы это было правдой, иногда это происходило бы случайно, но иногда я мог позволить ему работать в течение 30 минут, и это было бы хорошо.То же самое, что и сейчас, я полагаю.Я получаю первый кадр, нарисованный на экране, прежде чем он падает, так что я знаю, что что-то работает.

Как это будет правильно обрабатываться, и если да, то это даже обеспечит ускорение, которое я ищу?Или многократный доступ замедлит его так же сильно?

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