Я использую WGLWidget для загрузки 3D-моделей большого размера. Чтобы ускорить его, я использую опцию двоичного буфера для передачи буферов вершин. Документация рассказывает об использовании двоичных буферов:
Передачи двоичного буфера
В bufferDatafv () есть дополнительный логический аргумент, где вы
может указывать, что вы хотите, чтобы данные были переданы клиенту в
двоичная форма. WMemoryResource создается для каждого из этих буферов.
Если вы знаете, все предыдущие ресурсы не требуются в клиенте
больше вы можете освободить память с помощью метода clearBinaryResources ()
(память также управляется, так что это не обязательно). Если хотите
полностью управлять этими ресурсами самостоятельно, следующий метод может
использоваться.
Используя createAndLoadArrayBuffer (), вы можете загрузить буфер массива в
двоичный формат из URL. Это приведет к тому, что клиент получит
заданный URL, и сделать содержимое файла доступным в
ArrayBuffer, который затем может быть использован BufferData () для привязки их к
OpenGL буфер. Это идеально для быстрой загрузки буферов VBO, так как
он избегает преобразования чисел на текстовые строки на сервере, а затем
обратно на поплавки на клиенте. Вы можете комбинировать это с использованием
WResource (например, WMemoryResource) для отправки std :: vector вершин в
клиент. Обратите внимание, что использование ArrayBuffer невозможно, когда вы хотите
откат в форме рендеринга на стороне сервера.
Все работает, как и ожидалось, кроме одного - я установил сообщение о состоянии как «Готово», когда файл загружен и данные буфера обновляются на стороне сервера. Но существует задержка между временем установки буфера данных на сервере и временем их отправки клиенту и обновления на стороне клиента.
Пожалуйста, посмотрите видео и обратите внимание, что задержка между состоянием установлено на «Готово» внизу и временем рендеринга модели - Видео
Насколько я понимаю, когда используется двоичный буфер, данные передаются как ресурс памяти - по одному на буфер вершин (вершины, нормали, координаты текстуры и т. Д.). Я думаю, что сигнал, который испускается, когда все двоичные данные буфера доступны на стороне клиента, будет очень полезен, чтобы указать, что модель «фактически» готова, так что сообщение о состоянии может быть обновлено в самое подходящее время.
Или, может быть, есть какой-то другой механизм, чтобы справиться с этим?
Буду признателен за информацию о том, как с этим справиться.
Задержка значительно увеличивается на размещенном веб-сайте вместо localhost.