chromium/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_copy_texture.txt

Name

    CHROMIUM_copy_texture

Name Strings

    GL_CHROMIUM_copy_texture

Version

    Last Modifed Date: March 24, 2017

Dependencies

    OpenGL ES 2.0 or OpenGL ES 3.0 is required.

    EXT_texture_format_BGRA8888 affects the definition of this extension.
    ARB_texture_rg affects the definition of this extension.

Overview

    This extension expands on the functionality provided by the
    glCopyTexImage2D command.  A new function is exported,
    glCopyTextureCHROMIUM, that performs the same copy operation as
    glCopyTexImage2D.

    The extension also supports copying BGRA textures and copying
    EXTERNAL_OES texture to BGRA texture, which is not explicitly
    granted by EXT_texture_format_BGRA8888.

New Procedures and Functions

    void CopyTextureCHROMIUM(uint sourceId,
                             int sourceLevel,
                             enum destTarget,
                             uint destId,
                             int destLevel,
                             int internalFormat,
                             enum destType,
                             boolean unpackFlipY,
                             boolean unpackPremultiplyAlpha,
                             boolean unpackUnmultiplyAlpha)


    void CopySubTextureCHROMIUM(uint sourceId,
                                int sourceLevel,
                                enum destTarget,
                                uint destId,
                                int destLevel,
                                int xoffset,
                                int yoffset,
                                int x,
                                int y,
                                sizei width,
                                sizei height,
                                boolean unpackFlipY,
                                boolean unpackPremultiplyAlpha,
                                boolean unpackUnmultiplyAlpha)

Additions to the OpenGL ES 2.0 Specification

    The command

        CopyTextureCHROMIUM

    Copies the contents of <sourceLevel> level of <sourceId> texture to
    <destLevel> level and <destTarget> target of <destId> texture.

    <destTarget> must be TEXTURE_2D,
    TEXTURE_CUBE_MAP_POSITIVE_X, TEXTURE_CUBE_MAP_NEGATIVE_X,
    TEXTURE_CUBE_MAP_POSITIVE_Y, TEXTURE_CUBE_MAP_NEGATIVE_Y,
    TEXTURE_CUBE_MAP_POSITIVE_Z, TEXTURE_CUBE_MAP_NEGATIVE_Z,
    TEXTURE_RECTANGLE_ARB.

    The internal format of the destination texture is converted to that
    specified by <internalFormat>.

    When source texture doens't contain a superset of the component
    required by <internalFormat>, fill the components by following rules.

       source format           color components
       ----------------------------------------
       ALPHA                   (0, 0, 0, A)
       RED                     (R, 0, 0, 1)
       LUMINANCE               (L, L, L, 1)
       LUMINANCE_ALPHA         (L, L, L, A)
       RGB                     (R, G, B, 1)
       RGB8                    (R, G, B, 1)
       RGBA                    (R, G, B, A)
       RGBA8                   (R, G, B, A)
       BGRA_EXT                (R, G, B, A)
       BGRA8_EXT               (R, G, B, A)
       RGB_YCBCR_420V_CHROMIUM (R, G, B, 1)
       RGB_YCBCR_P010_CHROMIUM (R, G, B, 1)

    The format type of the destination texture is converted to that specified
    by <destType>.

    If <flipY> is true, vertically flip texture image data.

    If <unpackPremultiplyAlpha> and <unpackUnmultiplyAlpha> are true,
    no alpha processing occurs.  This is the equivalent of having neither flag
    set.

    When <sourceId> refers to a stream texture, the texture matrix will be
    applied as part of the copy operation.

    INVALID_OPERATION is generated if <internalFormat> is not one of the
    formats in Table 1.0.

    INVALID_OPERATION is generated if the internal format of <sourceId> is not
    one of formats in Table 1.1.

    INVALID_VALUE is generated if <sourceId> or <destId> are not valid texture
    objects.

    INVALID_ENUM is generated if <destTarget> is not one of the valid targets
    described above.

    INVALID_OPERATION is generated if the bound target of destination texture
    does not match <target>.

    INVALID_VALUE is generated if textures corresponding to <destId> have not
    been bound as TEXTURE_2D, TEXTURE_CUBE_MAP, or
    TEXTURE_RECTANGLE_ARB objects.

    INVALID_VALUE is generated if textures corresponding to <sourceId> have not
    been bound as TEXTURE_2D, TEXTURE_RECTANGLE_ARB or
    TEXTURE_EXTERNAL_OES objects.

    INVALID_VALUE is generated if <sourceLevel> is not 0 for ES 2.0, or if
    <sourceLevel> or <destLevel> is less than 0 for ES 3.0.

    INVALID_VALUE is generated if <sourceLevel> of the source texture is not
    defined.

    INVALID_OPERATION is generated on ES 3.0 if <sourceId> refers to an
    external texture (OES_EGL_image_external), <destId> refers to a texture
    with an integer-type internal format, and the underlying context does not
    support OES_EGL_image_external_essl3.

    The command

        CopySubTextureCHROMIUM

    Copies the sub contents of texture referred to by <sourceId> to <destId>
    texture without redefining <destId> texture.

    See CopyTextureCHROMIUM for the interpretation of the <destTarget>,
    <sourceLevel>, <destLevel>, <flipY>, <premultiplyAlpha>, and
    <unmultiplyAlpha> arguments.

    <xoffset> and <yoffset> specify a texel offset in the x and y direction
    respectively within the destination texture.

    <x> and <y> specify specify a texel offset in the x and y direction
    respectively within the source texture.

    <width> specifies the width of the texture subimage.

    <height> specifies the width of the texture subimage.

    INVALID_VALUE is generated if either <sourceId> texture or <destId>
    texture is not defined.

    INVALID_OPERATION is generated if the internal format of <sourceId> or
    <destId> is not one of formats in Table 1.1.

    INVALID_OPERATION is generated if the destination texture array has not
    been defined.

    INVALID_VALUE is generated if <destId> texture is not bound as
    TEXTURE_2D or TEXTURE_RECTANGLE_ARB.

    INVALID_VALUE is generated if level 0 of the source texture or
    the destination texture is not defined.

    INVALID_VALUE is generated if (<xoffset> + <width>) > destWidth,
    or (<yoffset> + <height>) > destHeight.

    INVALID_OPERATION is generated on ES 2.0 if <sourceId> refers to an
    external texture (OES_EGL_image_external), <destId> refers to a texture
    with an integer-type internal format, and the underlying context does not
    support OES_EGL_image_external_essl3.

    Table 1.0 Valid internal formats for CopyTextureCHROMIUM:

        <internalFormat>
        ---------------
        RGB
        RGBA
        RGB8
        RGBA8
        BGRA_EXT
        BGRA8_EXT,
        SRGB_EXT
        SRGB_ALPHA_EXT
        R8
        R8UI
        RG8
        RG8UI
        SRGB8
        RGB565
        RGB8UI
        SRGB8_ALPHA8
        RGB5_A1
        RGBA4
        RGBA4
        RGBA8UI
        RGB9_E5
        R16F
        R32F
        RG16F
        RG32F
        RGB16F
        RGB32F
        RGBA16F
        RGBA32F
        R11F_G11F_B10F

    Table 1.1 Valid source texture internal formats for CopyTextureCHROMIUM and
    source and destination formats for CopySubTextureCHROMIUM:

        internal format
        ---------------
        RED
        ALPHA
        LUMINANCE
        LUMINANCE_ALPHA
        RGB
        RGBA
        RGB8
        RGBA8
        BGRA_EXT
        BGRA8_EXT
        RGB_YCBCR_420V_CHROMIUM
        RGB_YCBCR_P010_CHROMIUM

Dependencies on ARB_texture_rg

    If ARB_texture_rg is not supported:
     * delete any reference to the R8 format.

Errors

    None.

New Tokens

    None.

New State

    None.

Revision History

    8/1/2011    Documented the extension
    7/4/2013    Add a new parameter dest_type to glCopyTextureCHROMIUM()
    16/7/2014   Add TEXTURE_RECTANGLE_ARB as valid source_id target
    19/6/2015   Add arguments unpack_flip_y, unpack_premultiply_alpha, and
                unpack_unmultiply_alpha to both commands.
    4/1/2016    Removed the argument target.
    4/1/2016    Added TEXTURE_RECTANGLE_ARB as valid dest_id target.
    19/12/2016  Supported more ES 3.0 formats.
    18/1/2017   Supported source_level and dest_level.
    19/1/2017   Added TEXTURE_CUBE_MAP as valid dest_id target.
    24/3/2017   Clean up naming and move formats into tables.
    12/06/2019   Added RGB_YCBCR_P010_CHROMIUM