glDrawElements () более эффективен, чем glDrawArrays (), когда существует много дублирующихся вершин?

Я пытаюсь сжать некоторые увеличения производительности из своего приложения iPhone OpenGL ES. Согласно Инструментам, мое использование фермера составляет близкие 100% большую часть времени, и мой кадр/с - приблизительно 24. Я хотел бы разбудить своего кадр/с более чем 30. Я могу добраться там путем преобразования от GL_FLOAT до GL_SHORT, но это представляет некоторые довольно пугающие технические проблемы для меня в данный момент. Я не пошел бы туда.

Так, я рассматриваю переключение с glDrawArrays () к glDrawElements (). У меня есть 35 сеток, составленных из 708 вершин, но много тех вершин совместно используется поверхностями. Я - отображение текстур, но сетка главным образом универсальна в цвете. Поверхности, которые требуют специального текстурирования, оставят, как.

Скажем, я могу сократить количество вершин в половине. Давайте также скажем, что я также организую свою геометрию способом, которая имеет смысл для iPhone: скажите, с помощью инструмента Imagination Technologies PVRTTriStrip. Игнорирование небольшого объема дополнительной памяти для индексного массива, который означает, что я примерно сократил пропускную способность памяти в половине, таким образом, я должен видеть, что довольно хорошая производительность увеличивается.

Действительно ли это верно, или я пропускаю или неправильно понимаю что-то? Совет ценится.

9
задан Rob Jones 15 January 2010 в 16:40
поделиться

2 ответа

Если кто-то заинтересован, я пошел дальше и попробовал, без части инструментов PvRTtristrip. Все тестирование было сделано на iPhone 3G. Я смог масштабировать мои вершины от 708 до 113 лет. И с тех пор, что я менее 255, я использую Glubyte в качестве своего типа индекса. Итак, я пошел от:

35 * (708 * 32) = ~ 774к

к:

35 * (113 * 32 + 708 * 1) = ~ 148k

, которые уменьшали мою общую пропускную способность памяти памяти до 20% от того, что это было. Мой ФПС увеличился до ~ 34. Итак, я видел около 42% улучшения в ФПС. В целом я довольно счастлив. Я думаю, что есть больше, чтобы быть полученным, но у меня есть большая рыба, чтобы жарить сейчас.

Кроме того, я отфиксировал кучу вырожденных треугольников (не тот полезный вид), чтобы получить мой индекс до 522, от 708. От того, что я видел увеличение до ~ 40 кадров в секунду от ~ 34 FPS, я видел.

17
ответ дан 4 December 2019 в 11:42
поделиться

Если вы попадаете на использование Tiler на 100% в инструментах (, как я был ), вы ограничены размером вашей геометрии. Из всех вещей, которые я пытался улучшить производительность, я заметил только значительный удар в рамках пламерата, когда уменьшал размер геометрии. Итак, да, если вы можете устранить некоторые вершины от отправки, вы должны увидеть повышение производительности.

Даже если вы заявляете, что трудно сделать, я настоятельно рекомендую преобразовать от GL_float в GL_shorts, потому что вы увидите большой прыжок в скорости рендеринга. Я сделал это в моем приложении, и это было не слишком много хлопот, чтобы реализовать за тип возвращения, которую я получил.

1
ответ дан 4 December 2019 в 11:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: