У меня есть программа, которая рисует некоторую местность и моделирует воду, протекающую по ней (дешевым и простым способом).
Обновление воды было легко распараллелить с помощью OpenMP, поэтому я могу делать ~ 50 обновлений в секунду. Проблема заключается в том, что даже при небольшом количестве воды количество обращений в секунду очень и очень низкое (начинается с 5 и падает до 2 после значительного количества воды).
Это не проблема с видеокартой, потому что ландшафт более сложный и прорисовывается настолько быстро, что boost::timer
говорит мне, что я получаю бесконечное ничье в секунду, если отключаю воду. Это может быть связано с пропускной способностью памяти (так как я предполагаю, что модель остается на карте и не должна передаваться каждый раз).
Меня беспокоит то, что при каждом розыгрыше я звоню glVertex3f()
примерно миллион раз (максимальный размер 450 * 600, 4 вершины в каждой), и это делается полностью последовательно, потому что Glut не позволяет я звоню что-нибудь параллельно.
Итак ... есть ли какой-то способ построить список параллельно, а затем сразу передать его OpenGL? Или какой-то другой способ заставить его рисовать это быстрее? Я использую неправильный метод (кроме очевидного «использовать меньше вершин»)?