15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ANGLE_framebuffer_blit
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ANGLE_framebuffer_blit
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContributors
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Contributors to EXT_framebuffer_blit
125bd8deadSopenharmony_ci    Daniel Koch, TransGaming Inc.
135bd8deadSopenharmony_ci    Shannon Woods, TransGaming Inc.
145bd8deadSopenharmony_ci    Kenneth Russell, Google Inc.
155bd8deadSopenharmony_ci    Vangelis Kokkevis, Google Inc.
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ciContact
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ci    Daniel Koch, TransGaming Inc. (daniel 'at' transgaming 'dot' com)
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ciStatus
225bd8deadSopenharmony_ci
235bd8deadSopenharmony_ci    Implemented in ANGLE ES2
245bd8deadSopenharmony_ci
255bd8deadSopenharmony_ciVersion
265bd8deadSopenharmony_ci
275bd8deadSopenharmony_ci    Last Modified Date: Sept 22, 2012
285bd8deadSopenharmony_ci    Author Revision: 4
295bd8deadSopenharmony_ci
305bd8deadSopenharmony_ciNumber
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ci    OpenGL ES Extension #83
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ciDependencies
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ci    OpenGL ES 2.0 is required.
375bd8deadSopenharmony_ci
385bd8deadSopenharmony_ci    The extension is written against the OpenGL ES 2.0 specification.
395bd8deadSopenharmony_ci
405bd8deadSopenharmony_ci    OES_texture_3D affects the definition of this extension.
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ciOverview
435bd8deadSopenharmony_ci
445bd8deadSopenharmony_ci    This extension modifies framebuffer objects by splitting the
455bd8deadSopenharmony_ci    framebuffer object binding point into separate DRAW and READ
465bd8deadSopenharmony_ci    bindings.  This allows copying directly from one framebuffer to
475bd8deadSopenharmony_ci    another.  In addition, a new high performance blit function is
485bd8deadSopenharmony_ci    added to facilitate these blits and perform some data conversion
495bd8deadSopenharmony_ci    where allowed.
505bd8deadSopenharmony_ci
515bd8deadSopenharmony_ciIP Status
525bd8deadSopenharmony_ci
535bd8deadSopenharmony_ci    No known IP claims.
545bd8deadSopenharmony_ci
555bd8deadSopenharmony_ciNew Procedures and Functions
565bd8deadSopenharmony_ci
575bd8deadSopenharmony_ci    void BlitFramebufferANGLE(int srcX0, int srcY0, int srcX1, int srcY1,
585bd8deadSopenharmony_ci                              int dstX0, int dstY0, int dstX1, int dstY1,
595bd8deadSopenharmony_ci                              bitfield mask, enum filter);
605bd8deadSopenharmony_ci
615bd8deadSopenharmony_ciNew Tokens
625bd8deadSopenharmony_ci
635bd8deadSopenharmony_ci    Accepted by the <target> parameter of BindFramebuffer,
645bd8deadSopenharmony_ci    CheckFramebufferStatus, FramebufferTexture2D, FramebufferTexture3DOES,
655bd8deadSopenharmony_ci    FramebufferRenderbuffer, and
665bd8deadSopenharmony_ci    GetFramebufferAttachmentParameteriv:
675bd8deadSopenharmony_ci
685bd8deadSopenharmony_ci    // (reusing the tokens from EXT_framebuffer_blit)
695bd8deadSopenharmony_ci    READ_FRAMEBUFFER_ANGLE                0x8CA8
705bd8deadSopenharmony_ci    DRAW_FRAMEBUFFER_ANGLE                0x8CA9
715bd8deadSopenharmony_ci
725bd8deadSopenharmony_ci    Accepted by the <pname> parameters of GetIntegerv and GetFloatv:
735bd8deadSopenharmony_ci
745bd8deadSopenharmony_ci    // (reusing the tokens from EXT_framebuffer_blit)
755bd8deadSopenharmony_ci    DRAW_FRAMEBUFFER_BINDING_ANGLE        0x8CA6 // alias FRAMEBUFFER_BINDING
765bd8deadSopenharmony_ci    READ_FRAMEBUFFER_BINDING_ANGLE        0x8CAA
775bd8deadSopenharmony_ci
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL ES 2.0 Specification (Rasterization)
805bd8deadSopenharmony_ci
815bd8deadSopenharmony_ci    Change the last paragraph of section 3.7.2 (Alternate Texture Image
825bd8deadSopenharmony_ci    Specification Commands) to:
835bd8deadSopenharmony_ci
845bd8deadSopenharmony_ci    "Calling CopyTexSubImage3DOES, CopyTexImage2D or CopyTexSubImage2D will
855bd8deadSopenharmony_ci    result in an INVALID_FRAMEBUFFER_OPERATION error if the object bound
865bd8deadSopenharmony_ci    to READ_FRAMEBUFFER_BINDING_ANGLE is not "framebuffer complete"
875bd8deadSopenharmony_ci    (section 4.4.4.2)."
885bd8deadSopenharmony_ci
895bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL ES 2.0 Specification (Per-Fragment
905bd8deadSopenharmony_ciOperations and the Framebuffer)
915bd8deadSopenharmony_ci
925bd8deadSopenharmony_ci    Change the first word of Chapter 4 from "The" to "A".
935bd8deadSopenharmony_ci
945bd8deadSopenharmony_ci    Append to the introduction of Chapter 4:
955bd8deadSopenharmony_ci
965bd8deadSopenharmony_ci    "Conceptually, the GL has two active framebuffers; the draw
975bd8deadSopenharmony_ci    framebuffer is the destination for rendering operations, and the
985bd8deadSopenharmony_ci    read framebuffer is the source for readback operations.  The same
995bd8deadSopenharmony_ci    framebuffer may be used for both drawing and reading.  Section
1005bd8deadSopenharmony_ci    4.4.1 describes the mechanism for controlling framebuffer usage."
1015bd8deadSopenharmony_ci
1025bd8deadSopenharmony_ci    Modify the first sentence of the last paragraph of section 4.1.1 as follows:
1035bd8deadSopenharmony_ci
1045bd8deadSopenharmony_ci    "While an application-created framebuffer object is bound to
1055bd8deadSopenharmony_ci    DRAW_FRAMEBUFFER_ANGLE, the pixel ownership test always passes."
1065bd8deadSopenharmony_ci
1075bd8deadSopenharmony_ci    Add to 4.3.1 (Reading Pixels), right before the subsection titled
1085bd8deadSopenharmony_ci    "Obtaining Pixels from the Framebuffer":
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci    "Calling ReadPixels generates INVALID_FRAMEBUFFER_OPERATION if
1115bd8deadSopenharmony_ci    the object bound to READ_FRAMEBUFFER_BINDING_ANGLE is not "framebuffer
1125bd8deadSopenharmony_ci    complete" (section 4.4.4.2). GetIntegerv generates an INVALID_OPERATION
1135bd8deadSopenharmony_ci    error if the object bound to READ_FRAMEBUFFER_BINDING_ANGLE is not
1145bd8deadSopenharmony_ci    framebuffer complete, or if the GL is using a framebuffer object 
1155bd8deadSopenharmony_ci    (i.e. READ_FRAMEBUFFER_BINDING_ANGLE is non-zero) and there is no color
1165bd8deadSopenharmony_ci    attachment."
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ci    Insert a new section 4.3.2 titled "Copying Pixels" and renumber the
1195bd8deadSopenharmony_ci    subsequent sections.  Add the following text:
1205bd8deadSopenharmony_ci
1215bd8deadSopenharmony_ci    "BlitFramebufferANGLE transfers a rectangle of pixel values from one
1225bd8deadSopenharmony_ci    region of the read framebuffer to another in the draw framebuffer.
1235bd8deadSopenharmony_ci
1245bd8deadSopenharmony_ci    BlitFramebufferANGLE(int srcX0, int srcY0, int srcX1, int srcY1,
1255bd8deadSopenharmony_ci                         int dstX0, int dstY0, int dstX1, int dstY1,
1265bd8deadSopenharmony_ci                         bitfield mask, enum filter);
1275bd8deadSopenharmony_ci
1285bd8deadSopenharmony_ci    <mask> is the bitwise OR of a number of values indicating which
1295bd8deadSopenharmony_ci    buffers are to be copied. The values are COLOR_BUFFER_BIT,
1305bd8deadSopenharmony_ci    DEPTH_BUFFER_BIT, and STENCIL_BUFFER_BIT, which are described in
1315bd8deadSopenharmony_ci    section 4.2.3.  The pixels corresponding to these buffers are
1325bd8deadSopenharmony_ci    copied from the source rectangle, bound by the locations (srcX0,
1335bd8deadSopenharmony_ci    srcY0) and (srcX1, srcY1), to the destination rectangle, bound by
1345bd8deadSopenharmony_ci    the locations (dstX0, dstY0) and (dstX1, dstY1).  The lower bounds
1355bd8deadSopenharmony_ci    of the rectangle are inclusive, while the upper bounds are
1365bd8deadSopenharmony_ci    exclusive.
1375bd8deadSopenharmony_ci
1385bd8deadSopenharmony_ci    The actual region taken from the read framebuffer is limited to the
1395bd8deadSopenharmony_ci    intersection of the source buffers being transferred, which may include
1405bd8deadSopenharmony_ci    the color buffer, the depth buffer, and/or the stencil buffer depending on
1415bd8deadSopenharmony_ci    <mask>. The actual region written to the draw framebuffer is limited to the
1425bd8deadSopenharmony_ci    intersection of the destination buffers being written, which may include
1435bd8deadSopenharmony_ci    the color buffer, the depth buffer, and/or the stencil buffer
1445bd8deadSopenharmony_ci    depending on <mask>. Whether or not the source or destination regions are
1455bd8deadSopenharmony_ci    altered due to these limits, the offset applied to pixels being transferred
1465bd8deadSopenharmony_ci    is performed as though no such limits were present.
1475bd8deadSopenharmony_ci
1485bd8deadSopenharmony_ci    Stretching and scaling during a copy are not supported. If the source
1495bd8deadSopenharmony_ci    and destination rectangle dimensions do not match, no copy is
1505bd8deadSopenharmony_ci    performed and an INVALID_OPERATION error is generated.
1515bd8deadSopenharmony_ci    Because stretching is not supported, <filter> must be NEAREST and
1525bd8deadSopenharmony_ci    no filtering is applied. 
1535bd8deadSopenharmony_ci
1545bd8deadSopenharmony_ci    Flipping during a copy is not supported. If either the source or 
1555bd8deadSopenharmony_ci    destination rectangle specifies a negative dimension, the error 
1565bd8deadSopenharmony_ci    INVALID_OPERATION is generated. If both the source and 
1575bd8deadSopenharmony_ci    destination rectangles specify a negative dimension for the same 
1585bd8deadSopenharmony_ci    direction, no reversal is required and the operation is supported.
1595bd8deadSopenharmony_ci
1605bd8deadSopenharmony_ci    If the source and destination buffers are identical, and the
1615bd8deadSopenharmony_ci    source and destination rectangles overlap, the result of the blit
1625bd8deadSopenharmony_ci    operation is undefined.
1635bd8deadSopenharmony_ci
1645bd8deadSopenharmony_ci    The pixel copy bypasses the fragment pipeline.  The only fragment
1655bd8deadSopenharmony_ci    operations which affect the blit are the pixel ownership test and
1665bd8deadSopenharmony_ci    the scissor test.
1675bd8deadSopenharmony_ci
1685bd8deadSopenharmony_ci    If a buffer is specified in <mask> and does not exist in both the
1695bd8deadSopenharmony_ci    read and draw framebuffers, the corresponding bit is silently
1705bd8deadSopenharmony_ci    ignored.
1715bd8deadSopenharmony_ci
1725bd8deadSopenharmony_ci    Calling BlitFramebufferANGLE will result in an
1735bd8deadSopenharmony_ci    INVALID_FRAMEBUFFER_OPERATION error if the objects bound to
1745bd8deadSopenharmony_ci    DRAW_FRAMEBUFFER_BINDING_ANGLE and READ_FRAMEBUFFER_BINDING_ANGLE are
1755bd8deadSopenharmony_ci    not "framebuffer complete" (section 4.4.4.2)."
1765bd8deadSopenharmony_ci
1775bd8deadSopenharmony_ci    Calling BlitFramebufferANGLE will result in an INVALID_OPERATION
1785bd8deadSopenharmony_ci    error if <mask> includes COLOR_BUFFER_BIT and the source and 
1795bd8deadSopenharmony_ci    destination color formats to not match.
1805bd8deadSopenharmony_ci
1815bd8deadSopenharmony_ci    Calling BlitFramebufferANGLE will result in an INVALID_OPERATION
1825bd8deadSopenharmony_ci    error if <mask> includes DEPTH_BUFFER_BIT or STENCIL_BUFFER_BIT
1835bd8deadSopenharmony_ci    and the source and destination depth and stencil buffer formats do
1845bd8deadSopenharmony_ci    not match.
1855bd8deadSopenharmony_ci
1865bd8deadSopenharmony_ci    If <mask> includes DEPTH_BUFFER_BIT or STENCIL_BUFFER_BIT, only 
1875bd8deadSopenharmony_ci    complete buffers can be copied.  If the source rectangle does not 
1885bd8deadSopenharmony_ci    specify the complete source buffer or the destination rectangle 
1895bd8deadSopenharmony_ci    (after factoring the scissor region, if applicable) does not specify 
1905bd8deadSopenharmony_ci    the complete destination buffer, an INVALID_OPERATION
1915bd8deadSopenharmony_ci    error is generated.
1925bd8deadSopenharmony_ci
1935bd8deadSopenharmony_ci    Modify the beginning of section 4.4.1 as follows:
1945bd8deadSopenharmony_ci
1955bd8deadSopenharmony_ci    "The default framebuffer for rendering and readback operations is
1965bd8deadSopenharmony_ci    provided by the windowing system.  In addition, named framebuffer
1975bd8deadSopenharmony_ci    objects can be created and operated upon.  The namespace for
1985bd8deadSopenharmony_ci    framebuffer objects is the unsigned integers, with zero reserved
1995bd8deadSopenharmony_ci    by the GL for the default framebuffer.
2005bd8deadSopenharmony_ci
2015bd8deadSopenharmony_ci    A framebuffer object is created by binding an unused name to
2025bd8deadSopenharmony_ci    DRAW_FRAMEBUFFER_ANGLE or READ_FRAMEBUFFER_ANGLE.  The binding is
2035bd8deadSopenharmony_ci    effected by calling
2045bd8deadSopenharmony_ci
2055bd8deadSopenharmony_ci        void BindFramebuffer(enum target, uint framebuffer);
2065bd8deadSopenharmony_ci
2075bd8deadSopenharmony_ci    with <target> set to the desired framebuffer target and
2085bd8deadSopenharmony_ci    <framebuffer> set to the unused name.  The resulting framebuffer
2095bd8deadSopenharmony_ci    object is a new state vector, comprising one set of the state values
2105bd8deadSopenharmony_ci    listed in table 6.23 for each attachment point of the
2115bd8deadSopenharmony_ci    framebuffer, set to the same initial values.  There is one
2125bd8deadSopenharmony_ci    color attachment point, plus one each
2135bd8deadSopenharmony_ci    for the depth and stencil attachment points.
2145bd8deadSopenharmony_ci
2155bd8deadSopenharmony_ci    BindFramebuffer may also be used to bind an existing
2165bd8deadSopenharmony_ci    framebuffer object to DRAW_FRAMEBUFFER_ANGLE or
2175bd8deadSopenharmony_ci    READ_FRAMEBUFFER_ANGLE.  If the bind is successful no change is made
2185bd8deadSopenharmony_ci    to the state of the bound framebuffer object, and any previous
2195bd8deadSopenharmony_ci    binding to <target> is broken.
2205bd8deadSopenharmony_ci
2215bd8deadSopenharmony_ci    If a framebuffer object is bound to DRAW_FRAMEBUFFER_ANGLE or
2225bd8deadSopenharmony_ci    READ_FRAMEBUFFER_ANGLE, it becomes the target for rendering or
2235bd8deadSopenharmony_ci    readback operations, respectively, until it is deleted or another
2245bd8deadSopenharmony_ci    framebuffer is bound to the corresponding bind point.  Calling
2255bd8deadSopenharmony_ci    BindFramebuffer with <target> set to FRAMEBUFFER binds the
2265bd8deadSopenharmony_ci    framebuffer to both DRAW_FRAMEBUFFER_ANGLE and READ_FRAMEBUFFER_ANGLE.
2275bd8deadSopenharmony_ci
2285bd8deadSopenharmony_ci    While a framebuffer object is bound, GL operations on the target
2295bd8deadSopenharmony_ci    to which it is bound affect the images attached to the bound
2305bd8deadSopenharmony_ci    framebuffer object, and queries of the target to which it is bound
2315bd8deadSopenharmony_ci    return state from the bound object.  Queries of the values
2325bd8deadSopenharmony_ci    specified in table 6.20 (Implementation Dependent Pixel Depths)
2335bd8deadSopenharmony_ci    and table 6.yy (Framebuffer Dependent Values) are
2345bd8deadSopenharmony_ci    derived from the framebuffer object bound to DRAW_FRAMEBUFFER_ANGLE.
2355bd8deadSopenharmony_ci
2365bd8deadSopenharmony_ci    The initial state of DRAW_FRAMEBUFFER_ANGLE and READ_FRAMEBUFFER_ANGLE
2375bd8deadSopenharmony_ci    refers to the default framebuffer provided by the windowing
2385bd8deadSopenharmony_ci    system.  In order that access to the default framebuffer is not
2395bd8deadSopenharmony_ci    lost, it is treated as a framebuffer object with the name of 0.
2405bd8deadSopenharmony_ci    The default framebuffer is therefore rendered to and read from
2415bd8deadSopenharmony_ci    while 0 is bound to the corresponding targets.  On some
2425bd8deadSopenharmony_ci    implementations, the properties of the default framebuffer can
2435bd8deadSopenharmony_ci    change over time (e.g., in response to windowing system events
2445bd8deadSopenharmony_ci    such as attaching the context to a new windowing system drawable.)"
2455bd8deadSopenharmony_ci
2465bd8deadSopenharmony_ci    Change the description of DeleteFramebuffers as follows:
2475bd8deadSopenharmony_ci
2485bd8deadSopenharmony_ci    "<framebuffers> contains <n> names of framebuffer objects to be
2495bd8deadSopenharmony_ci    deleted.  After a framebuffer object is deleted, it has no
2505bd8deadSopenharmony_ci    attachments, and its name is again unused.  If a framebuffer that
2515bd8deadSopenharmony_ci    is currently bound to one or more of the targets
2525bd8deadSopenharmony_ci    DRAW_FRAMEBUFFER_ANGLE or READ_FRAMEBUFFER_ANGLE is deleted, it is as
2535bd8deadSopenharmony_ci    though BindFramebuffer had been executed with the corresponding
2545bd8deadSopenharmony_ci    <target> and <framebuffer> zero.  Unused names in <framebuffers>
2555bd8deadSopenharmony_ci    are silently ignored, as is the value zero."
2565bd8deadSopenharmony_ci
2575bd8deadSopenharmony_ci
2585bd8deadSopenharmony_ci    In section 4.4.3 (Renderbuffer Objects), modify the first two sentences
2595bd8deadSopenharmony_ci    of the description of FramebufferRenderbuffer as follows:
2605bd8deadSopenharmony_ci
2615bd8deadSopenharmony_ci    "<target> must be DRAW_FRAMEBUFFER_ANGLE, READ_FRAMEBUFFER_ANGLE, or
2625bd8deadSopenharmony_ci    FRAMEBUFFER.  If <target> is FRAMEBUFFER, it behaves as
2635bd8deadSopenharmony_ci    though DRAW_FRAMEBUFFER_ANGLE was specified.  The INVALID_OPERATION 
2645bd8deadSopenharmony_ci    error is generated if the value of the corresponding binding is zero."
2655bd8deadSopenharmony_ci
2665bd8deadSopenharmony_ci    In section 4.4.3 (Renderbuffer Objects), modify the first two sentences
2675bd8deadSopenharmony_ci    of the description of FramebufferTexture2D as follows:
2685bd8deadSopenharmony_ci
2695bd8deadSopenharmony_ci    "<target> must be DRAW_FRAMEBUFFER_ANGLE,
2705bd8deadSopenharmony_ci    READ_FRAMEBUFFER_ANGLE, or FRAMEBUFFER.  If <target> is
2715bd8deadSopenharmony_ci    FRAMEBUFFER, it behaves as though DRAW_FRAMEBUFFER_ANGLE was
2725bd8deadSopenharmony_ci    specified.  The INVALID_OPERATION error is generated if the value of the
2735bd8deadSopenharmony_ci    corresponding binding is zero."
2745bd8deadSopenharmony_ci
2755bd8deadSopenharmony_ci    In section 4.4.5 (Framebuffer Completeness), modify the first sentence 
2765bd8deadSopenharmony_ci    of the description of CheckFramebufferStatus as follows:
2775bd8deadSopenharmony_ci
2785bd8deadSopenharmony_ci    "If <target> is not DRAW_FRAMEBUFFER_ANGLE, READ_FRAMEBUFFER_ANGLE or
2795bd8deadSopenharmony_ci    FRAMEBUFFER, the error INVALID_ENUM is generated.  If <target> is
2805bd8deadSopenharmony_ci    FRAMEBUFFER, it behaves as though DRAW_FRAMEBUFFER_ANGLE was
2815bd8deadSopenharmony_ci    specified."
2825bd8deadSopenharmony_ci
2835bd8deadSopenharmony_ci    Modify the first sentence of the subsection titled "Effects of Framebuffer
2845bd8deadSopenharmony_ci    Completeness on Framebuffer Operations" to be:
2855bd8deadSopenharmony_ci
2865bd8deadSopenharmony_ci    "Attempting to render to or read from a framebuffer which is not
2875bd8deadSopenharmony_ci    framebuffer complete will generate an
2885bd8deadSopenharmony_ci    INVALID_FRAMEBUFFER_OPERATION error."
2895bd8deadSopenharmony_ci    
2905bd8deadSopenharmony_ci
2915bd8deadSopenharmony_ci
2925bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 1.5 Specification (State and State
2935bd8deadSopenharmony_ciRequests)
2945bd8deadSopenharmony_ci
2955bd8deadSopenharmony_ci    In section 6.1.3, modify the first sentence of the description of
2965bd8deadSopenharmony_ci    GetFramebufferAttachmentParameteriv as follows:
2975bd8deadSopenharmony_ci
2985bd8deadSopenharmony_ci    "<target> must be DRAW_FRAMEBUFFER_ANGLE, READ_FRAMEBUFFER_ANGLE or
2995bd8deadSopenharmony_ci    FRAMEBUFFER.  If <target> is FRAMEBUFFER, it behaves as
3005bd8deadSopenharmony_ci    though DRAW_FRAMEBUFFER_ANGLE was specified."
3015bd8deadSopenharmony_ci
3025bd8deadSopenharmony_ci    Modify the title of Table 6.23 (Framebuffer State) to be "Framebuffer 
3035bd8deadSopenharmony_ci    (state per attachment point)". 
3045bd8deadSopenharmony_ci
3055bd8deadSopenharmony_ci
3065bd8deadSopenharmony_ciDependencies on OES_texture_3D
3075bd8deadSopenharmony_ci
3085bd8deadSopenharmony_ci    On an OpenGL ES implementation, in the absense of OES_texture_3D,
3095bd8deadSopenharmony_ci    omit references to FramebufferTexture3DOES and CopyTexSubImage3DOES.
3105bd8deadSopenharmony_ci
3115bd8deadSopenharmony_ciErrors
3125bd8deadSopenharmony_ci
3135bd8deadSopenharmony_ci    The error INVALID_FRAMEBUFFER_OPERATION is generated if
3145bd8deadSopenharmony_ci    BlitFramebufferANGLE is called while the
3155bd8deadSopenharmony_ci    draw framebuffer is not framebuffer complete.
3165bd8deadSopenharmony_ci
3175bd8deadSopenharmony_ci    The error INVALID_FRAMEBUFFER_OPERATION is generated if
3185bd8deadSopenharmony_ci    BlitFramebufferANGLE, ReadPixels, CopyTex{Sub}Image*, is called while the
3195bd8deadSopenharmony_ci    read framebuffer is not framebuffer complete.
3205bd8deadSopenharmony_ci
3215bd8deadSopenharmony_ci    The error INVALID_OPERATION is generated if GetIntegerv is called
3225bd8deadSopenharmony_ci    while the read framebuffer is not framebuffer complete, or if there
3235bd8deadSopenharmony_ci    is no color attachment present on the read framebuffer object.
3245bd8deadSopenharmony_ci
3255bd8deadSopenharmony_ci    The error INVALID_VALUE is generated by BlitFramebufferANGLE if
3265bd8deadSopenharmony_ci    <mask> has any bits set other than those named by
3275bd8deadSopenharmony_ci    COLOR_BUFFER_BIT, DEPTH_BUFFER_BIT or STENCIL_BUFFER_BIT.
3285bd8deadSopenharmony_ci
3295bd8deadSopenharmony_ci    The error INVALID_OPERATION is generated if BlitFramebufferANGLE is
3305bd8deadSopenharmony_ci    called and <mask> includes DEPTH_BUFFER_BIT or STENCIL_BUFFER_BIT
3315bd8deadSopenharmony_ci    and the source and destination depth or stencil buffer formats do
3325bd8deadSopenharmony_ci    not match.
3335bd8deadSopenharmony_ci
3345bd8deadSopenharmony_ci    The error INVALID_OPERATION is generated if BlitFramebufferANGLE is 
3355bd8deadSopenharmony_ci    called and any of the following conditions are true:
3365bd8deadSopenharmony_ci     - the source and destination rectangle dimensions do not match
3375bd8deadSopenharmony_ci       (ie scaling or flipping is required).
3385bd8deadSopenharmony_ci     - <mask> includes COLOR_BUFFER_BIT and the source and destination 
3395bd8deadSopenharmony_ci       buffer formats do not match.
3405bd8deadSopenharmony_ci     - <mask> includes DEPTH_BUFFER_BIT or STENCIL_BUFFER_BIT and the
3415bd8deadSopenharmony_ci       source or destination rectangles do not specify the entire source
3425bd8deadSopenharmony_ci       or destination buffer (after applying any scissor region).
3435bd8deadSopenharmony_ci
3445bd8deadSopenharmony_ci    The error INVALID_ENUM is generated by BlitFramebufferANGLE if
3455bd8deadSopenharmony_ci    <filter> is not NEAREST.
3465bd8deadSopenharmony_ci
3475bd8deadSopenharmony_ci    The error INVALID_ENUM is generated if BindFramebuffer,
3485bd8deadSopenharmony_ci    CheckFramebufferStatus, FramebufferTexture{2D|3DOES},
3495bd8deadSopenharmony_ci    FramebufferRenderbuffer, or
3505bd8deadSopenharmony_ci    GetFramebufferAttachmentParameteriv is called and <target> is
3515bd8deadSopenharmony_ci    not DRAW_FRAMEBUFFER_ANGLE, READ_FRAMEBUFFER_ANGLE or FRAMEBUFFER.
3525bd8deadSopenharmony_ci
3535bd8deadSopenharmony_ciNew State
3545bd8deadSopenharmony_ci
3555bd8deadSopenharmony_ci    (Add a new table 6.xx, "Framebuffer (state per framebuffer target binding point)")
3565bd8deadSopenharmony_ci
3575bd8deadSopenharmony_ci    Get Value                     Type   Get Command   Initial Value    Description               Section
3585bd8deadSopenharmony_ci    ------------------------------  ----   -----------   --------------   -------------------       ------------
3595bd8deadSopenharmony_ci    DRAW_FRAMEBUFFER_BINDING_ANGLE   Z+    GetIntegerv   0                framebuffer object bound  4.4.1
3605bd8deadSopenharmony_ci                                                                          to DRAW_FRAMEBUFFER_ANGLE
3615bd8deadSopenharmony_ci    READ_FRAMEBUFFER_BINDING_ANGLE   Z+    GetIntegerv   0                framebuffer object        4.4.1
3625bd8deadSopenharmony_ci                                                                          to READ_FRAMEBUFFER_ANGLE
3635bd8deadSopenharmony_ci
3645bd8deadSopenharmony_ci    Remove reference to FRAMEBUFFER_BINDING from Table 6.23.
3655bd8deadSopenharmony_ci
3665bd8deadSopenharmony_ci    (Add a new table 6.yy, "Framebuffer Dependent Values") 
3675bd8deadSopenharmony_ci
3685bd8deadSopenharmony_ci    Get Value                     Type   Get Command   Initial Value    Description               Section
3695bd8deadSopenharmony_ci    ----------------------------  ----   -----------   --------------   -------------------       ------------
3705bd8deadSopenharmony_ci    SAMPLE_BUFFERS                 Z+    GetIntegerv   0                Number of multisample     3.2
3715bd8deadSopenharmony_ci                                                                        buffers
3725bd8deadSopenharmony_ci    SAMPLES                        Z+    GetIntegerv   0                Coverage mask size        3.2
3735bd8deadSopenharmony_ci
3745bd8deadSopenharmony_ci    Remove the references to SAMPLE_BUFFERS and SAMPLES from Table 6.17.
3755bd8deadSopenharmony_ci
3765bd8deadSopenharmony_ci
3775bd8deadSopenharmony_ciIssues
3785bd8deadSopenharmony_ci
3795bd8deadSopenharmony_ci    1) What should we call this extension?
3805bd8deadSopenharmony_ci  
3815bd8deadSopenharmony_ci       Resolved: ANGLE_framebuffer_blit.  
3825bd8deadSopenharmony_ci
3835bd8deadSopenharmony_ci       This extension is a result of a collaboration between Google and 
3845bd8deadSopenharmony_ci       TransGaming for the open-source ANGLE project. Typically one would
3855bd8deadSopenharmony_ci       label a multi-vendor extension as EXT, but EXT_framebuffer_blit 
3865bd8deadSopenharmony_ci       is already the name for this on Desktop GL.  Additionally this
3875bd8deadSopenharmony_ci       isn't truely a multi-vendor extension because there is only one
3885bd8deadSopenharmony_ci       implementation of this.  We'll follow the example of the open-source
3895bd8deadSopenharmony_ci       MESA project which uses the project name for the vendor suffix.
3905bd8deadSopenharmony_ci
3915bd8deadSopenharmony_ci    2) Why is this done as a separate extension instead of just supporting
3925bd8deadSopenharmony_ci       EXT_framebuffer_blit?
3935bd8deadSopenharmony_ci
3945bd8deadSopenharmony_ci       To date, EXT_framebuffer_blit has not had interactions with OpenGL ES
3955bd8deadSopenharmony_ci       specified and, as far as we know, it has not previously been exposed on 
3965bd8deadSopenharmony_ci       an ES 1.1 or ES 2.0 implementation. Because there are enough 
3975bd8deadSopenharmony_ci       differences between Desktop GL and OpenGL ES, and since OpenGL ES 2.0 
3985bd8deadSopenharmony_ci       has already subsumed the EXT_framebuffer_object functionality (with 
3995bd8deadSopenharmony_ci       some changes) it was deemed a worthwhile exercise to fully specify the
4005bd8deadSopenharmony_ci       interactions.  Additionally, some of the choices in exactly which 
4015bd8deadSopenharmony_ci       functionality is supported by BlitFramebufferANGLE is dictated by
4025bd8deadSopenharmony_ci       what is reasonable to support on a implementation which is 
4035bd8deadSopenharmony_ci       layered on Direct3D9.  It is not expected that other implementations 
4045bd8deadSopenharmony_ci       will necessary have the same set of restrictions or requirements. 
4055bd8deadSopenharmony_ci
4065bd8deadSopenharmony_ci    3) How does this extension differ from EXT_framebuffer_blit?
4075bd8deadSopenharmony_ci
4085bd8deadSopenharmony_ci       This extension is designed to be a pure subset of the 
4095bd8deadSopenharmony_ci       EXT_framebuffer_blit functionality as applicable to OpenGL ES 2.0.
4105bd8deadSopenharmony_ci
4115bd8deadSopenharmony_ci       Functionality that is unchanged:
4125bd8deadSopenharmony_ci        - the split DRAW and READ framebuffer attachment points and related sematics.
4135bd8deadSopenharmony_ci        - the token values for the DRAW/READ_FRAMEBUFFER and DRAW/READ_FRAMBUFFER_BINDING
4145bd8deadSopenharmony_ci        - the signature of the BlitFramebuffer entry-point.
4155bd8deadSopenharmony_ci       
4165bd8deadSopenharmony_ci       Additional restrictions imposed by BlitFramebufferANGLE:
4175bd8deadSopenharmony_ci        - no color conversions are supported
4185bd8deadSopenharmony_ci        - no scaling, stretching or flipping are supported
4195bd8deadSopenharmony_ci        - no filtering is supported (a consequence of no stretching)
4205bd8deadSopenharmony_ci        - only whole depth and/or stencil buffers can be copied
4215bd8deadSopenharmony_ci
4225bd8deadSopenharmony_ciRevision History
4235bd8deadSopenharmony_ci
4245bd8deadSopenharmony_ci    Revision 1, 2010/07/06
4255bd8deadSopenharmony_ci      - copied from revision 15 of EXT_framebuffer_object
4265bd8deadSopenharmony_ci      - removed language that was clearly not relevant to ES2
4275bd8deadSopenharmony_ci      - rebased changes against the OpenGL ES 2.0 specification
4285bd8deadSopenharmony_ci      - added ANGLE-specific restrictions
4295bd8deadSopenharmony_ci    Revision 2, 2010/07/15
4305bd8deadSopenharmony_ci      - clarifications of implicit clamping to buffer sizes (from ARB_fbo)
4315bd8deadSopenharmony_ci      - clarify that D/S restricts apply after the scissor is applied
4325bd8deadSopenharmony_ci      - improve some error language
4335bd8deadSopenharmony_ci    Revision 3, 2010/08/06
4345bd8deadSopenharmony_ci      - add additional contributors, update implementation status
4355bd8deadSopenharmony_ci    Revision 4, 2012/09/22
4365bd8deadSopenharmony_ci      - document errors for GetIntegerv.
4375bd8deadSopenharmony_ci
438