Я работаю над графическим движком в стиле Minecraft, который скоро будет реализован в реальной игре. У меня есть двигатель до 60+ FPS при стресс-тестировании геометрии. Я использую только LWJGL для поддержки графики. В какой-то момент у меня были большие задержки при обновлении данных VBO в локальной памяти, но я решил эту проблему путем многопоточности, оптимизации и синхронизации универсального блока / конструктора блоков.
Во время, когда я буферизирую данные VBO в видеопамять ПОСЛЕ отбора, я иногда испытываю небольшую заминку (20-30 миллисекунд), которая может вызвать зависание экрана в течение этого времени. Я думаю, что причина задержки заключается в том, что я посылаю огромное количество данных геометрии в VBO (3-5 МБ) через glBufferData (в режиме статического рисования) каждую пару кадров. Я уже реализовал отбраковку усеченного фрагмента, отбраковку усеченного блока, отбраковку воздушного блока и направленный сборщик окружения.
Это оставляет мне два вопроса:
Есть ли другой способ буферизации данных, который я могу использовать, более быстрый, чем glBufferData? (Может быть, способ многопоточности второго буфера в качестве подготовительного, который будет перемещать сцепку во второй поток)?
Если нет, то как бы я реализовал прямой отбор окклюзии из локальной памяти (возможно, из видеопамяти), используя матрицу плавающих точек, указывающих углы кубов (легко манипулируемых)? Обратите внимание, что антипорталы несовместимы с моей структурой.
Или на «простом» английском: как я могу ускорить буферизацию данных в vram с помощью glBufferData без дальнейшего уменьшения размера данных?
Обновление: запуск пользовательского маршрута отбора окклюзии. Я вполне уверен, что мое время буферизации данных значительно увеличивается на время, затрачиваемое на добавление закупоренных блоков, и, возможно, даже задерживается из-за синхронизации, поскольку средство обновления отбраковки берет блокировки. Если у кого-то есть предложения по выбору окклюзии из буфера, это было бы здорово.
Обновление 2: по совпадению проблема была решена после того, как я добавил выборку со скрытыми лицами (два соприкасающихся лица = ни один не рендерится). Мне больше не понадобится дополнительное повышение производительности, так как оно само по себе уменьшило размер моего буфера на 90%, а частота кадров увеличилась на 400%. Спасибо за ответы РТС.