Прежде чем я задам вопрос: если вы хотите увидеть весь код, он находится здесь...
https://github.com/spencerparkin/GravityMaze
(Постарайтесь не зацикливаться на том, что это идиотское приложение.)
Теперь к вопросу...
Мое приложение не делает ничего, кроме рисования линий разных цветов. Фактически, все это делается за один вызов отрисовки. Кроме того, если я закомментирую этот вызов отрисовки и только очистлю буфер цвета и поменяю местами, мой рендеринг все равно будет медленным. Мой счетчик FPS показывает, что обычно у меня около 100 FPS, но анимация, несомненно, доказывает, что мой рендеринг медленный.
Перенесемся на несколько дней вперед. Я решил сделать ставку на производительность и добавить немного MIDI-музыки. MIDI-плеер ничего не делает, кроме отправки MIDI-сообщений в порт. Накладные расходы, которые он добавляет к основному потоку, настолько минимальны, что я не верю, что это может повлиять на производительность. Однако это подтвердило то, что мой основной цикл работает медленно, потому что после этого не только рендеринг все еще был медленным (что неудивительно), но и воспроизведение музыки тоже было медленным, и темп не был постоянным. Я снова закомментировал код рендеринга (оставив только вызов eglSwapBuffers()), чтобы ничего не отображалось и музыка по-прежнему работала медленно. (Ничего удивительного: медленная музыка лишь подтверждает проблему медлительности основного потока.)
Хорошо, теперь поймите это. Я решаю пойти на компромисс. Мой рендеринг медленный, это нормально, но я хочу, чтобы музыка воспроизводилась с правильной и постоянной скоростью. Поэтому я стараюсь вынести воспроизведение MIDI в отдельный поток, чтобы на него не влияла проблема медлительности, которая в настоящее время существует в основном потоке. Ну что вы думаете?! После этого и мой основной поток и MIDI-поток теперь работают с разумной частотой кадров! Рендеринг теперь происходит настолько быстро, насколько мне хотелось! Мой FPS сейчас ~40 (меньше 100?!), но рендеринг действительно происходит намного, намного быстрее. >Взрыв мозга!
Подробнее здесь: https://stackoverflow.com/questions/778 ... d-a-thread