Name

    EXT_framebuffer_blit_layers

Name Strings

    GL_EXT_framebuffer_blit_layers

Contacts

    Simon Zeni, Status Holdings Ltd. <simon@zeni.ca>

Contributors

    Simon Zeni

Status

    Draft

Version

    Version 0.1, 2022/09/16

Number

    OpenGL Extension #558
    OpenGL ES Extension #341

Dependencies

    OpenGL 3.0, OpenGL ES 3.0, or GL_EXT_framebuffer_blit required

    This extension is written against the OpenGL 4.6 Core and OpenGL ES 3.2
    specifications.

Overview

    This extensions defines the behaviour for copying data from one layered
    framebuffer to another layered framebuffer.

New Procedures and Functions

    void BlitFramebufferLayersEXT(int srcX0, int srcY0, int srcX1, int srcY1,
                                  int dstX0, int dstY0, int dstX1, int dstY1,
                                  bitfield mask, enum filter);

    void BlitFramebufferLayerEXT(int srcX0, int srcY0, int srcX1, int srcY1,
                                 int srcLayer, int dstX0, int dstY0, int dstX1,
                                 int dstY1, int dstLayer, bitfield mask,
                                 enum filter);

New Tokens

    None

Additions to Chapter 16 of the OpenGL ES 3.2 specification (Reading and
Copying Pixels) and Chaper 18 of the OpenGL 4.6 Core specification (Reading
and Copying Pixels)

    Append the following to the section 16.2.1 (Blitting Pixel Rectangles) of
    the OpenGL ES 3.2 specification, and to the section 18.3.1 (Blitting Pixel
    Rectangles) of the OpenGL 4.6 core specification.

    The command

        void BlitFramebufferLayersEXT(int srcX0, int srcY0, int srcX1,
            int srcY1, int dstX0, int dstY0, int dstX1, int dstY1,
            bitfield mask, enum filter);

    extends the behaviour of the command BlitFramebuffer to all the layers of
    the textures bound to the read framebuffer and the draw framebuffer.

    Calling BlitFramebufferLayersEXT will result in an INVALID_OPERATION if
    the read and the draw framebuffers don't have the same number of layers.

    The command

        void BlitFramebufferLayerEXT(int srcX0, int srcY0, int srcX1, int srcY1,
            int srcLayer, int dstX0, int dstY0, int dstX1, int dstY1,
            int dstLayer, bitfield mask, enum filter);

    extends the behaviour of the command BlitFramebuffer to a specified layer
    of the texture bound to the read framebuffer, and a specified layer of the
    draw framebuffer.

    Calling BlitFramebufferLayerEXT will result in an INVALID_VALUE if
    srcLayer or dstLayer is negative, larger than the value of
    MAX_ARRAY_TEXTURE_LAYERS minus one, or larger than the number of layers in
    the attached texture.

Issues

    1) How does the extension deal with GL_OVR_multiview generating the error
    INVALID_FRAMEBUFFER_OPERATION if the read framebuffer has more than one
    layer when using the BlitFramebuffer command.

        GL_OVR_multiview defines a two dimensional array texture with multiple
        layers as multiview. If the extension GL_OVR_multiview is enabled, and
        a multiview texture is bound to the read framebuffer, the error
        INVALID_FRAMEBUFFER_OPERATION is generated as expected. For any other
        kind of textures, the commands BlitFramebufferLayerEXT and
        BlitFramebufferLayersEXT proceed as expected.

Revision History

    Version 0.2, 2022-09-30 (Simon Zeni)
        - Conflict with GL_OVR_multiview

    Version 0.1, 2022-09-16 (Simon Zeni)
        - Initial draft
