2015-11-26 4 views
-3

Я программирую редактор в игре для своей простой 2D-игры, где сетки динамически создаются и удаляются довольно часто. Я использую libgdxЧерез некоторое время glGenBuffers очень медленно

Все работает нормально, за исключением того, что редактор становится медленным. Он реагирует на входные события довольно поздно.

Чтобы найти слабую точку в моем коде (который не оптимизирован при любом atm), я запускаю jprofiler и профилировал CPU. Оказывается, что glGenBuffers занял более 2 сек. За 14 приглашений! Это для 7 ячеек с одним вершинным и индексным буфером. На самом деле, у меня довольно быстрая машина (i7-4790T, GTX980m, 16GB ...), поэтому здесь не должно быть проблем.

Я просто хочу знать, как это возможно, поскольку я понятия не имею.

jprofiler

+3

Вы удаляете буферы, которые больше не используете? Просто основанный на симптомах, это может быть утечка памяти. Можете ли вы посмотреть на общее использование памяти вашим приложением и посмотреть, растет ли оно? –

+3

Просто хотел заметить, что буферы, скорее всего, будут храниться в вашей памяти графических карт, поэтому вы не сможете увидеть, как ваше использование ОЗУ растет. В противном случае вы всегда должны очищать свои буферы, вызывая 'glDeleteBuffers'. – vesan

ответ

0

1-два комментария были правы. Я перестраивал большую часть сцены, чтобы проверить, если она все еще существует (не такая умная вообще). Если он все еще существует, восстановленная часть не будет удалена. Были заменены только замененные детали. : /.

Я нашел эту проблему с помощью JProfiler и профилирование памяти, как это было предложено в комментарии 1.

я не проверял графической памяти, но нет никакого другого пути, что мусор там, тоже.

0

Буферы всегда хранятся в памяти. Очистка всегда необходима, фрейм-буферы, байт-буферы и т. Д.

Смежные вопросы