Spec-Zone.ru › Web APIs

Расширение WEBGL_draw_buffers

Ограниченная доступность

Эта функция не является базовой, так как она не работает во всех широко используемых браузерах.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Расширение WEBGL_draw_buffers является частью API WebGL и позволяет фрагментной программе записывать данные в несколько текстур, что полезно, например, для отложенного шейдинга.

Расширения WebGL доступны с помощью метода WebGLRenderingContext.getExtension(). Дополнительную информацию см. также в разделе Использование расширений в учебнике по WebGL.

Примечание: Это расширение доступно только для контекстов WebGL1. В WebGL2 функциональность этого расширения доступна в контексте WebGL2 по умолчанию. В WebGL 2 константы доступны без суффикса "WEBGL", а новые встроенные функции GLSL требуют GLSL #version 300 es.

Константы

Это расширение экспонирует новые константы, которые могут быть использованы в методах gl.framebufferRenderbuffer(), gl.framebufferTexture2D(), gl.getFramebufferAttachmentParameter() ext.drawBuffersWEBGL() и gl.getParameter().

ext.COLOR_ATTACHMENT0_WEBGL, ext.COLOR_ATTACHMENT1_WEBGL, ext.COLOR_ATTACHMENT2_WEBGL, ext.COLOR_ATTACHMENT3_WEBGL, ext.COLOR_ATTACHMENT4_WEBGL, ext.COLOR_ATTACHMENT5_WEBGL, ext.COLOR_ATTACHMENT6_WEBGL, ext.COLOR_ATTACHMENT7_WEBGL, ext.COLOR_ATTACHMENT8_WEBGL, ext.COLOR_ATTACHMENT9_WEBGL, ext.COLOR_ATTACHMENT10_WEBGL, ext.COLOR_ATTACHMENT11_WEBGL, ext.COLOR_ATTACHMENT12_WEBGL, ext.COLOR_ATTACHMENT13_WEBGL, ext.COLOR_ATTACHMENT14_WEBGL, ext.COLOR_ATTACHMENT15_WEBGL

Значение, определяющее буфер цвета.

ext.DRAW_BUFFER0_WEBGL, ext.DRAW_BUFFER1_WEBGL, ext.DRAW_BUFFER2_WEBGL, ext.DRAW_BUFFER3_WEBGL, ext.DRAW_BUFFER4_WEBGL, ext.DRAW_BUFFER5_WEBGL, ext.DRAW_BUFFER6_WEBGL, ext.DRAW_BUFFER7_WEBGL, ext.DRAW_BUFFER8_WEBGL ext.DRAW_BUFFER9_WEBGL, ext.DRAW_BUFFER10_WEBGL, ext.DRAW_BUFFER11_WEBGL, ext.DRAW_BUFFER12_WEBGL, ext.DRAW_BUFFER13_WEBGL, ext.DRAW_BUFFER14_WEBGL, ext.DRAW_BUFFER15_WEBGL

Значение, возвращающее буфер отрисовки.

ext.MAX_COLOR_ATTACHMENTS_WEBGL

Значение, указывающее максимальное количество точек присоединения цвета к буферу кадров.

ext.MAX_DRAW_BUFFERS_WEBGL

Значение, указывающее максимальное количество буферов отрисовки.

Методы экземпляра

Это расширение экспонирует один новый метод.

ext.drawBuffersWEBGL()

Определяет буферы отрисовки, в которые записываются все фрагментные цвета. (При использовании WebGL2, этот метод доступен как gl.drawBuffers() по умолчанию).

Примеры

Включение расширения:

const ext = gl.getExtension("WEBGL_draw_buffers");

Связывание нескольких текстур (в массив tx[] ) с разными цветовыми привязками буфера кадров:

const fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
gl.framebufferTexture2D(
  gl.FRAMEBUFFER,
  ext.COLOR_ATTACHMENT0_WEBGL,
  gl.TEXTURE_2D,
  tx[0],
  0,
);
gl.framebufferTexture2D(
  gl.FRAMEBUFFER,
  ext.COLOR_ATTACHMENT1_WEBGL,
  gl.TEXTURE_2D,
  tx[1],
  0,
);
gl.framebufferTexture2D(
  gl.FRAMEBUFFER,
  ext.COLOR_ATTACHMENT2_WEBGL,
  gl.TEXTURE_2D,
  tx[2],
  0,
);
gl.framebufferTexture2D(
  gl.FRAMEBUFFER,
  ext.COLOR_ATTACHMENT3_WEBGL,
  gl.TEXTURE_2D,
  tx[3],
  0,
);

Сопоставление цветовых привязок с слотами буфера отрисовки, в которые будет записывать фрагментная программа, используя gl_FragData:

ext.drawBuffersWEBGL([
  ext.COLOR_ATTACHMENT0_WEBGL, // gl_FragData[0]
  ext.COLOR_ATTACHMENT1_WEBGL, // gl_FragData[1]
  ext.COLOR_ATTACHMENT2_WEBGL, // gl_FragData[2]
  ext.COLOR_ATTACHMENT3_WEBGL, // gl_FragData[3]
]);

Код шейдера, записывающий данные в несколько текстур:

<script type="x-shader/x-fragment">
  #extension GL_EXT_draw_buffers : require

  precision highp float;

  void main(void) {
    gl_FragData[0] = vec4(0.25);
    gl_FragData[1] = vec4(0.5);
    gl_FragData[2] = vec4(0.75);
    gl_FragData[3] = vec4(1.0);
  }
</script>

Спецификации

Спецификация
Спецификация расширения WebGL WEBGL_draw_buffers

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
WEBGL_draw_buffers 36 17 28 23 9 Нет Нет Нет 15 Нет Нет
drawBuffersWEBGL 36 17 28 23 9 Нет Нет Нет 15 Нет Нет

См. также

  • WebGLRenderingContext.getExtension()
  • WebGL2RenderingContext.drawBuffers()
  • Блог Mozilla Hacks по отложенному шейдингу WebGL

© 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/WEBGL_draw_buffers

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API