Предел платежа за ничью. Когда вы делаете вызов рисования и вызываете конкретную программу шейдеров, вы ограничены пределом, но ваш следующий призыв к обращению может использовать совершенно разные текстуры в одном и том же кадре анимации.
Кроме того, 8 - это минимальная гарантия. Системы должны поддерживать не менее восьми, что следует учитывать как совместимость с WebGL. Но более приятные графические карты поддерживают более восьми. Вы можете запросить максимальное количество текстур изображений для платформы вы находитесь, как это:
var maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);
Вы можете также искать для вершинных текстур:
gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS)
или комбинацию из двух:
gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS)
Вы также можете использовать сайт, подобный WebGL Report (Отказ от ответственности, я являюсь автором), чтобы найти этот стат для платформы, на которой вы находитесь (в разделе «Фрагментный шейдер» -> Макс. Текстурные единицы).
Вы также можете проверить WebGL Stats, чтобы увидеть графики поддержки максимальных текстур изображения. График MAX_TEXTURE_IMAGE_UNITS
показывает, что поддержка до 16 текстур изображения довольно распространена, наслаждаясь скоростью поддержки 95% в современных браузерах.
Это означает, что мне нужно переключать текстуры между каждым призывом на рисование, вместо того, чтобы загружать текстуры вперед. Что вызывает другой вопрос: нужно ли загружать униформы для каждого призыва на призыв (что-то еще, кроме текстур)? Сохраняются ли форма, загруженные в программу? –
Если вызов розыгрыша использует разные текстуры, чем предыдущий призыв на призыв, тогда да, вы должны перевязать текстуры между вызовами рисования. Вопрос о нехарактерной форме звучит как отдельный вопрос, может быть, поставленный новый вопрос, сфокусированный на этом. – emackey