WebGLRenderingContext: метод bufferData()
Базовая Широко поддерживается
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Примечание: Эта функция доступна в Web Workers.
Метод WebGLRenderingContext.bufferData() API WebGL инициализирует и создаёт хранилище данных объекта буфера.
Синтаксис
bufferData(target, size, usage) bufferData(target, srcData, usage)
Параметры
target-
GLenumопределяющий точку привязки (target). Возможные значения:gl.ARRAY_BUFFER-
Буфер, содержащий атрибуты вершин, такие как координаты вершин, данные координат текстур или цвет вершин.
gl.ELEMENT_ARRAY_BUFFER-
Буфер, используемый для индексов элементов.
При использовании контекста WebGL 2, доступны следующие дополнительные значения:
gl.COPY_READ_BUFFER-
Буфер для копирования данных из одного буфера в другой.
gl.COPY_WRITE_BUFFER-
Буфер для копирования данных из одного буфера в другой.
gl.TRANSFORM_FEEDBACK_BUFFER-
Буфер для операций обратной связи по преобразованиям.
gl.UNIFORM_BUFFER-
Буфер для хранения блоков униформ.
gl.PIXEL_PACK_BUFFER-
Буфер для операций передачи пикселей.
gl.PIXEL_UNPACK_BUFFER-
Буфер для операций передачи пикселей.
size-
GLsizeiptrустанавливающее размер хранилища данных объекта буфера в байтах. srcDataНеобязательно-
ArrayBuffer,SharedArrayBuffer,TypedArrayилиDataView, которые будут скопированы в хранилище. Еслиnull, хранилище всё ещё создаётся, но его содержимое не инициализировано и неопределено. usage-
GLenum, определяющий предполагаемый шаблон использования хранилища данных для оптимизации. Возможные значения:gl.STATIC_DRAW-
Содержимое предназначено для указания один раз приложением и многократного использования в качестве источника для команд рисования и задания изображений WebGL.
gl.DYNAMIC_DRAW-
Содержимое предназначено для многократного переопределения приложением и многократного использования в качестве источника для команд рисования и задания изображений WebGL.
gl.STREAM_DRAW-
Содержимое предназначено для указания один раз приложением и использования не более нескольких раз в качестве источника для команд рисования и задания изображений WebGL.
При использовании контекста WebGL 2, доступны следующие дополнительные значения:
gl.STATIC_READ-
Содержимое предназначено для указания один раз путём чтения данных из WebGL и многократного запроса приложением.
gl.DYNAMIC_READ-
Содержимое предназначено для многократного переопределения путём чтения данных из WebGL и многократного запроса приложением.
gl.STREAM_READ-
Содержимое предназначено для указания один раз путём чтения данных из WebGL и не более нескольких запросов приложением.
gl.STATIC_COPY-
Содержимое предназначено для указания один раз путём чтения данных из WebGL и многократного использования в качестве источника для команд рисования и задания изображений WebGL.
gl.DYNAMIC_COPY-
Содержимое предназначено для многократного переопределения путём чтения данных из WebGL и многократного использования в качестве источника для команд рисования и задания изображений WebGL.
gl.STREAM_COPY-
Содержимое предназначено для указания один раз путём чтения данных из WebGL и использования не более нескольких раз в качестве источника для команд рисования и задания изображений WebGL.
Возвращаемое значение
Ничего (undefined).
Исключения
- Ошибка
gl.OUT_OF_MEMORYвозникает, если контекст не может создать хранилище данных с заданнымsize. - Ошибка
gl.INVALID_VALUEвозникает, еслиsizeотрицательно. - Ошибка
gl.INVALID_ENUMвозникает, еслиtargetилиusageне являются одним из разрешённых перечислений.
Примеры
Использование bufferData
const canvas = document.getElementById("canvas");
const gl = canvas.getContext("webgl");
const buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, 1024, gl.STATIC_DRAW);
Получение информации о буфере
Чтобы проверить текущее использование буфера и размер буфера, используйте метод WebGLRenderingContext.getBufferParameter().
gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE); gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_USAGE);
Получение размера массива с типом данных
Для расчёта параметра размера для массива с типом данных.
const dataArray = new Float32Array([1, 2, 3, 4]); const sizeInBytes = dataArray.length * dataArray.BYTES_PER_ELEMENT;
Спецификации
| Спецификация |
|---|
| Спецификация WebGL # 5.14.5 |
Совместимость с браузерами
| Рабочие столы | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
bufferData |
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/bufferData