2016-12-07 3 views
4

Я знаю, что существует ограничение на 8 текстур в WebGL.Максимальное количество текстур в WebGL?

Мой вопрос в том, что 8 лимит в глобальном масштабе, или по шейдеру/программе мудрым?

Если это ограничение по шейдеру/программе, означает ли это, что когда я загружаю текстуры в униформу одного шейдера, я могу начать повторное использование этих слотов для других шейдеров? Скажем, я использовал TEXTURE0 для одной формы, могу ли я использовать TEXTURE0 в другой форме?

ответ

10

Предел платежа за ничью. Когда вы делаете вызов рисования и вызываете конкретную программу шейдеров, вы ограничены пределом, но ваш следующий призыв к обращению может использовать совершенно разные текстуры в одном и том же кадре анимации.

Кроме того, 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% в современных браузерах.

+0

Это означает, что мне нужно переключать текстуры между каждым призывом на рисование, вместо того, чтобы загружать текстуры вперед. Что вызывает другой вопрос: нужно ли загружать униформы для каждого призыва на призыв (что-то еще, кроме текстур)? Сохраняются ли форма, загруженные в программу? –

+0

Если вызов розыгрыша использует разные текстуры, чем предыдущий призыв на призыв, тогда да, вы должны перевязать текстуры между вызовами рисования. Вопрос о нехарактерной форме звучит как отдельный вопрос, может быть, поставленный новый вопрос, сфокусированный на этом. – emackey

Смежные вопросы