У меня есть некоторый код рендеринга, который запрашивает 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