Edit

kc3-lang/angle/extensions/CHROMIUM_copy_texture.txt

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2017-05-01 16:04:35
    Hash : 4f0e003e
    Message : Implement the new formats/features of the ES3 CHROMIUM_copy_texture. Some non-renderable texture formats remain unimplemented. BUG=angleproject:1932 Change-Id: Id206432d6e26a70fc0e84478a4e43e9eefadcf2f Reviewed-on: https://chromium-review.googlesource.com/491948 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • extensions/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.
        CHROMIUM_ycbcr_422_image 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_422_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.
    
        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.
    
        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
            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_422_CHROMIUM
    
    Dependencies on ARB_texture_rg
    
        If ARB_texture_rg is not supported:
         * delete any reference to the R8 format.
    
    Dependencies on CHROMIUM_ycbcr_422_image
    
        If CHROMIUM_ycbcr_422_image is not supported:
         * delete any reference to the RGB_YCBCR_422_CHROMIUM 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.