10.000 треугольников - это на самом деле не так уж много, даже для вашего среднего ноутбука на сегодняшний день.
Списки отображения устарели, это не самый полезный подход.
Первое, что нужно сделать, это нарисовать свои треугольники за один вызов - это должно быть легко возможно.
Итак:
1) Храните все ваши данные треугольника (координаты вершины) в одном Buffer
(именно так JOGL обрабатывает массивы вершин, IIRC). Тогда либо:
- Обновлять этот буфер каждый кадр на ЦП и рендерить все это, используя
glVertexPointer
и glDrawArrays
,
- Создайте VBO и (
GL_DYNAMIC_DRAW
тип) и обновляйте его каждый кадр этим буфером. В этом случае более современный подход, но на самом деле не большая разница с вышеописанным с точки зрения скорости.
И после этого вы будете рендерить все эти 10.000 треугольников с помощью одного glDrawArrays
вызова.
Это все равно оставит вычисление треугольников на ЦП, но сэкономит вам много времени ЦП, затрачиваемое на вызовы драйверов - все треугольники будут отправлены через ваш PCI-E одновременно и визуализированы в мгновение ока.
Если это все еще слишком медленно:
2) Подумайте, можете ли вы / хотите переместить некоторые операции, выполняемые над треугольниками, в графический процессор и выполнять вычисления в вершинном шейдере. Я не могу сказать здесь слишком много, пока не узнаю, какие вычисления вы делаете, но я действительно надеюсь, что 1) будет достаточно.
Если у вас было около 10.000 вызовов на CallList
каждого кадра, это определенно является причиной вашей низкой производительности.