WebGLRenderingContext: метод enableVertexAttribArray()
Базовая Широко доступная
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Примечание: Эта функция доступна в Web Workers.
Метод WebGLRenderingContext enableVertexAttribArray(), являющийся частью WebGL API, включает в список массивов атрибутов общий массив атрибутов вершин в указанном индексе.
Примечание: Вы можете отключить массив атрибутов, вызвав disableVertexAttribArray().
В WebGL значения, применимые к определённой вершине, хранятся в атрибутах. Они доступны только коду JavaScript и вершинному шейдеру. К атрибутам обращаются по номеру индекса в списке атрибутов, поддерживаемом графическим процессором. Некоторые индексы атрибутов вершин могут иметь предопределённые цели в зависимости от платформы и/или графического процессора. Другие назначаются слоем WebGL при создании атрибутов.
В любом случае, поскольку атрибуты нельзя использовать, пока они не включены, и по умолчанию они отключены, необходимо вызвать enableVertexAttribArray() для включения отдельных атрибутов, чтобы они могли быть использованы. После этого другие методы могут быть использованы для доступа к атрибуту, включая vertexAttribPointer(), vertexAttrib*() и getVertexAttrib().
Синтаксис
enableVertexAttribArray(index)
Параметры
index-
Значение типа
GLuint, определяющее номер индекса, который однозначно идентифицирует атрибут вершины, который нужно включить. Если вам известны имя атрибута, но не его индекс, вы можете получить индекс, вызвавgetAttribLocation().
Возвращаемое значение
Ничего (undefined).
Ошибки
Чтобы проверить наличие ошибок после вызова enableVertexAttribArray(), вызовите getError().
WebGLRenderingContext.INVALID_VALUE-
Указанный
indexявляется недопустимым; то есть, он больше или равен максимальному числу записей, разрешённых в списке атрибутов вершин контекста, как указано значениемWebGLRenderingContext.MAX_VERTEX_ATTRIBS.
Примеры
В этом коде — фрагменте, взятом из полного примера Пример анимации 2D WebGL — показано использование enableVertexArray() для активации атрибута, который будет использован слоем WebGL для передачи отдельных вершин из буфера вершин в функцию вершинного шейдера.
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer); aVertexPosition = gl.getAttribLocation(shaderProgram, "aVertexPosition"); gl.enableVertexAttribArray(aVertexPosition); gl.vertexAttribPointer( aVertexPosition, vertexNumComponents, gl.FLOAT, false, 0, 0, ); gl.drawArrays(gl.TRIANGLES, 0, vertexCount);
Примечание: Этот фрагмент кода взят из функции animateScene() в примере «Анимация 2D WebGL». См. эту статью для полного примера и просмотра результата анимации.
Этот код устанавливает буфер вершин, которые будут использоваться для отрисовки треугольников фигуры, вызвав bindBuffer(). Затем индекс атрибута позиции вершины получаем из программы шейдера, вызвав getAttribLocation().
Теперь, когда индекс атрибута позиции вершины доступен в aVertexPosition, мы вызываем enableVertexAttribArray() для включения атрибута позиции, чтобы он мог быть использован программой шейдера (в частности, вершинным шейдером).
Затем буфер вершин связывается с атрибутом aVertexPosition путём вызова vertexAttribPointer(). Этот шаг не очевиден, поскольку это практически побочный эффект. Но в результате доступ к aVertexPosition теперь получает данные из буфера вершин.
С установленной связью между буфером вершин нашей фигуры и атрибутом aVertexPosition, используемым для передачи вершин по одному в вершинный шейдер, мы готовы отрисовать фигуру, вызвав drawArrays().
Спецификации
| Спецификация |
|---|
| Спецификация WebGL # 5.14.10 |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
enableVertexAttribArray |
9 | 12 | 4 | 12 | 5.1 | 25 | 4 | 12 | 8 | 1.5 | 4.4.3 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/enableVertexAttribArray