Webgl: макс. Вершинные равномерные векторы в реализациях на основе ANGLE - PullRequest
0 голосов
/ 31 января 2019

У меня есть некоторый код рендеринга, который запрашивает GL_MAX_VERTEX_UNIFORM_VECTORS, сообщает об этом значении на консоль и вычисляет на его основе одинаковые размеры массивов.Цель состоит в том, чтобы использовать (почти) все доступные GPR для некоторого пакетного рендеринга.

Код выполняется на настольном компьютере (Linux и Windows) и в браузерах при сборке с emscripten.Я попытался запустить его на графических процессорах Nvidia, AMD и Intel HD со всеми комбинациями графических процессоров и ОС.

В Linux как нативная, так и веб-версии работают нормально и сообщают GL_MAX_VERTEX_UNIFORM_VECTORS = 1024 на моих графических процессорах.

Затем я перезагружаюсь в Windows, где также нормально работает нативная версия, а веб-версия в Chrome и Firefox сообщает GL_MAX_VERTEX_UNIFORM_VECTORS = 4096 и отлично работает с Nvidia и AMD.Похоже, он использует фантомную форму, которая была недоступна для нативной сборки.Итак, мой первый вопрос: как?Поменяет ли он дополнительные значения из памяти?

Затем я запускаю этот код на Intel HD 4000 GPU в Windows.Собственная версия работает как положено (с правильным значением GL_MAX_VERTEX_UNIFORM_VECTORS), но веб-версия сообщает 4096 GL_MAX_VERTEX_UNIFORM_VECTORS и повреждает некоторые униформы: геометрия сбивается при использовании однородного массива в вершинном шейдере.

ПочемуУГОЛ сообщить неправильный GL_MAX_VERTEX_UNIFORM_VECTORS?Это ошибка?Как я могу получить правильное значение или иным образом использовать все доступные формы?Нет UBO, пожалуйста, я связан с webgl1.

Быстрое воспроизведение для webgl: https://sergeyext.github.io/sergeyext/max_vertex_uniform_vectors/start_webgl.html

...