back  Return to list

GL_EXT_framebuffer_blit
homeprevnext Name
  
    EXT_framebuffer_blit  
  
homeprevnext Name Strings
  
    GL_EXT_framebuffer_blit  
  
homeprevnext Contributors
  
    Michael Gold  
    Evan Hart  
    Jeff Juliano  
    Jon Leech  
    Bill Licea-Kane  
    Barthold Lichtenbelt  
    Brian Paul  
    Ian Romanick  
    John Rosasco  
    Jeremy Sandmel  
    Eskil Steenberg  
  
homeprevnext Contact
  
    Michael Gold, NVIDIA Corporation (gold 'at' nvidia.com)  
  
homeprevnext Status
  
    Complete.  Approved by the ARB "superbuffers" working group on  
    November 8, 2005.  
  
homeprevnext Version
  
    Last Modified Date: September 29, 2006  
    Author Revision: 14  
  
homeprevnext Number
  
    316  
  
homeprevnext Dependencies
  
    OpenGL 1.1 is required.  
  
    EXT_framebuffer_object is required.  
  
    The extension is written against the OpenGL 1.5 specification.  
  
    ARB_color_buffer_float affects the definition of this extension.  
  
homeprevnext Overview
  
    This extension modifies EXT_framebuffer_object by splitting the  
    framebuffer object binding point into separate DRAW and READ  
    bindings.  This allows copying directly from one framebuffer to  
    another.  In addition, a new high performance blit function is  
    added to facilitate these blits and perform some data conversion  
    where allowed.  
  
homeprevnext IP Status
  
    No known IP claims.  
  
homeprevnext New Procedures and Functions
  
    void BlitFramebufferEXT(int srcX0, int srcY0, int srcX1, int srcY1,  
                            int dstX0, int dstY0, int dstX1, int dstY1,  
                            bitfield mask, enum filter);  
  
homeprevnext New Tokens
  
    Accepted by the <target> parameter of BindFramebufferEXT,  
    CheckFramebufferStatusEXT, FramebufferTexture{1D|2D|3D}EXT,  
    FramebufferRenderbufferEXT, and  
    GetFramebufferAttachmentParameterivEXT:  
  
    READ_FRAMEBUFFER_EXT                0x8CA8  
    DRAW_FRAMEBUFFER_EXT                0x8CA9  
  
    Accepted by the <pname> parameters of GetIntegerv, GetFloatv, and GetDoublev:  
  
    DRAW_FRAMEBUFFER_BINDING_EXT        0x8CA6 // alias FRAMEBUFFER_BINDING_EXT  
    READ_FRAMEBUFFER_BINDING_EXT        0x8CAA  
  
  
homeprevnext Additions to Chapter 2 of the OpenGL 1.5 Specification (OpenGL Operation)
  
    Append the following to section 2.6.1:  
  
    "Calling Begin will result in an INVALID_FRAMEBUFFER_OPERATION_EXT  
    error if the object bound to DRAW_FRAMEBUFFER_BINDING_EXT is not  
    "framebuffer complete" (section 4.4.4.2)."  
  
homeprevnext Additions to Chapter 3 of the OpenGL 1.5 Specification (Rasterization)
  
    Add to section 3.6.3, at the end of the subsection titled  
    "Alternate Color Table Specification Commands":  
  
    "Calling CopyColorTable or CopyColorSubTable will result in an  
    INVALID_FRAMEBUFFER_OPERATION_EXT error if the object bound to  
    READ_FRAMEBUFFER_BINDING_EXT is not "framebuffer complete"  
    (section 4.4.4.2)."  
  
    Add to section 3.6.3, at the end of the subsection titled  
    "Alternate Convolution Filter Specification Commands":  
  
    "Calling CopyConvolutionFilter1D or CopyConvolutionFilter2D will  
    result in an INVALID_FRAMEBUFFER_OPERATION_EXT error if the object  
    bound to READ_FRAMEBUFFER_BINDING_EXT is not "framebuffer  
    complete" (section 4.4.4.2)."  
  
    In section 3.6.4, modify the final paragraph of the definition of  
    DrawPixels as follows:  
  
    "Calling DrawPixels will result in an  
    INVALID_FRAMEBUFFER_OPERATION_EXT error if the object bound to  
    DRAW_FRAMEBUFFER_BINDING_EXT is not "framebuffer complete"  
    (section 4.4.4.2)."  
  
    Add the following to section 3.7, following the description of  
    Bitmap:  
  
    "Calling Bitmap will result in an  
    INVALID_FRAMEBUFFER_OPERATION_EXT error if the object bound to  
    DRAW_FRAMEBUFFER_BINDING_EXT is not "framebuffer complete"  
    (section 4.4.4.2)."  
  
    Append the following to section 3.8.2:  
  
    "Calling CopyTexImage3D, CopyTexSubImage3D, CopyTexImage2D,  
    CopyTexSubImage2D, CopyTexImage1D or CopyTexSubImage1D will result  
    in an INVALID_FRAMEBUFFER_OPERATION_EXT error if the object bound  
    to READ_FRAMEBUFFER_BINDING_EXT is not "framebuffer complete"  
    (section 4.4.4.2)."  
  
homeprevnext Additions to Chapter 4 of the OpenGL 1.5 Specification (Per-Fragment Operations and the Frame Buffer)
  
    Change the first word of Chapter 4 from "The" to "A".  
  
    Append to the introduction of Chapter 4:  
  
    "Conceptually, the GL has two active framebuffers; the draw  
    framebuffer is the destination for rendering operations, and the  
    read framebuffer is the source for readback operations.  The same  
    framebuffer may be used for both drawing and reading.  Section  
    4.4.1 describes the mechanism for controlling framebuffer usage."  
  
    Modify the last paragraph of section 4.1.1 as follows:  
  
    "While an application-created framebuffer object is bound to  
    DRAW_FRAMEBUFFER_EXT, the pixel ownership test always passes."  
  
    Modify the last sentence of the second to last paragraph of  
    section 4.2.4 as follows:  
  
    "If there is no accumulation buffer, or if the DRAW_FRAMEBUFFER_EXT  
    and READ_FRAMEBUFFER_EXT bindings (section 4.4.4.2) do not refer to  
    the same object, or if the GL is in color index mode, Accum  
    generates the error INVALID_OPERATION."  
  
    Add to 4.3.2 (Reading Pixels), right before the subsection titled  
    "Obtaining Pixels from the Framebuffer":  
  
    "Calling ReadPixels generates INVALID_FRAMEBUFFER_OPERATION_EXT if  
    the object bound to READ_FRAMEBUFFER_BINDING_EXT is not "framebuffer  
    complete" (section 4.4.4.2)."  
  
    In section 4.3.2, modify the definition of ReadBuffer as follows:  
  
    "The command  
  
         void ReadBuffer( enum src );  
  
    takes a symbolic constant as argument.  <src> must be one of the  
    values from tables 4.4 or 10.nnn.  Otherwise, INVALID_ENUM is  
    generated.  Further, the acceptable values for <src> depend on  
    whether the GL is using the default window-system-provided  
    framebuffer (i.e., READ_FRAMEBUFFER_BINDING_EXT is zero), or an  
    application-created framebuffer object (i.e.,  
    READ_FRAMEBUFFER_BINDING_EXT is non-zero).  For more information  
    about application-created framebuffer objects, see section 4.4.  
  
    When READ_FRAMEBUFFER_BINDING_EXT is zero, i.e. the default  
    window-system-provided framebuffer, <src> must be one of the  
    values listed in table 4.4. FRONT and LEFT refer to the front left  
    buffer, BACK refers to the back left buffer, and RIGHT refers to  
    the front right buffer.  The other constants correspond directly  
    to the buffers that they name. If the requested buffer is missing,  
    then the error INVALID_OPERATION is generated.  For the default  
    window-system-provided framebuffer, the initial setting for  
    ReadBuffer is FRONT if there is no back buffer and BACK  
    otherwise.  
  
    ReadBuffer will set the read buffer for input colors other than 0  
    to NONE.  
  
    Modify the first sentence of section 4.3.3 as follows:  
  
    "CopyPixels transfers a rectangle of pixel values from one region  
    of the read framebuffer to another in the draw framebuffer."  
  
    Add the following text to section 4.3.3, page 194, inside the  
    definition of CopyPixels:  
  
    "Finally, the behavior of several GL operations is specified "as if  
    the arguments were passed to CopyPixels."  These operations include:  
    CopyTex{Sub}Image*, CopyColor{Sub}Table, and CopyConvolutionFilter*.  
    INVALID_FRAMEBUFFER_OPERATION_EXT will be generated if an attempt is  
    made to execute one of these operations, or CopyPixels, while the  
    object bound to READ_FRAMEBUFFER_BINDING_EXT is not "framebuffer  
    complete" (as defined in section 4.4.4.2).  Furthermore, an attempt  
    to execute CopyPixels will generate  
    INVALID_FRAMEBUFFER_OPERATION_EXT while the object bound to  
    DRAW_FRAMEBUFFER_BINDING_EXT is not "framebuffer complete"."  
  
    Append to section 4.3.3:  
  
    "BlitFramebufferEXT transfers a rectangle of pixel values from one  
    region of the read framebuffer to another in the draw framebuffer.  
    There are some important distinctions from CopyPixels, as  
    described below.  
  
    BlitFramebufferEXT(int srcX0, int srcY0, int srcX1, int srcY1,  
                       int dstX0, int dstY0, int dstX1, int dstY1,  
                       bitfield mask, enum filter);  
  
    <mask> is the bitwise OR of a number of values indicating which  
    buffers are to be copied. The values are COLOR_BUFFER_BIT,  
    DEPTH_BUFFER_BIT, and STENCIL_BUFFER_BIT, which are described in  
    section 4.2.3.  The pixels corresponding to these buffers are  
    copied from the source rectangle, bound by the locations (srcX0,  
    srcY0) and (srcX1, srcY1), to the destination rectangle, bound by  
    the locations (dstX0, dstY0) and (dstX1, dstY1).  The lower bounds  
    of the rectangle are inclusive, while the upper bounds are  
    exclusive.  
  
    If the source and destination rectangle dimensions do not match,  
    the source image is stretched to fit the destination  
    rectangle. <filter> must be LINEAR or NEAREST and specifies the  
    method of interpolation to be applied if the image is  
    stretched. LINEAR filtering is allowed only for the color buffer;  
    if <mask> includes DEPTH_BUFFER_BIT or STENCIL_BUFFER_BIT, and  
    filter is not NEAREST, no copy is performed and an  
    INVALID_OPERATION error is generated.  If the source and  
    destination dimensions are identical, no filtering is applied.  If  
    either the source or destination rectangle specifies a negative  
    dimension, the image is reversed in the corresponding direction.  
    If both the source and destination rectangles specify a negative  
    dimension for the same direction, no reversal is performed.  
  
    If the source and destination buffers are identical, and the  
    source and destination rectangles overlap, the result of the blit  
    operation is undefined.  
  
    The pixel copy bypasses the fragment pipeline.  The only fragment  
    operations which affect the blit are the pixel ownership test and  
    the scissor test.  
  
    If a buffer is specified in <mask> and does not exist in both the  
    read and draw framebuffers, the corresponding bit is silently  
    ignored.  
  
    If the color formats of the read and draw framebuffers do not  
    match, and <mask> includes COLOR_BUFFER_BIT, the pixel groups are  
    converted to match the destination format as in CopyPixels, except  
    that no pixel transfer operations apply and clamping behaves as if  
    CLAMP_FRAGMENT_COLOR_ARB is set to FIXED_ONLY_ARB.  
      
    Calling CopyPixels or BlitFramebufferEXT will result in an  
    INVALID_FRAMEBUFFER_OPERATION_EXT error if the objects bound to  
    DRAW_FRAMEBUFFER_BINDING_EXT and READ_FRAMEBUFFER_BINDING_EXT are  
    not "framebuffer complete" (section 4.4.4.2)."  
  
    Calling BlitFramebufferEXT will result in an INVALID_OPERATION  
    error if <mask> includes DEPTH_BUFFER_BIT or STENCIL_BUFFER_BIT  
    and the source and destination depth and stencil buffer formats do  
    not match.  
  
    Modify the beginning of section 4.4.1 as follows:  
  
    "The default framebuffer for rendering and readback operations is  
    provided by the windowing system.  In addition, named framebuffer  
    objects can be created and operated upon.  The namespace for  
    framebuffer objects is the unsigned integers, with zero reserved  
    by the GL for the default framebuffer.  
  
    A framebuffer object is created by binding an unused name to  
    DRAW_FRAMEBUFFER_EXT or READ_FRAMEBUFFER_EXT.  The binding is  
    effected by calling  
  
        void BindFramebufferEXT(enum target, uint framebuffer);  
  
    with <target> set to the desired framebuffer target and  
    <framebuffer> set to the unused name.  The resulting framebuffer  
    object is a new state vector, comprising all the state values  
    listed in table 4.nnn, as well as one set of the state values  
    listed in table 5.nnn for each attachment point of the  
    framebuffer, set to the same initial values.  There are  
    MAX_COLOR_ATTACHMENTS_EXT color attachment points, plus one each  
    for the depth and stencil attachment points.  
  
    BindFramebufferEXT may also be used to bind an existing  
    framebuffer object to DRAW_FRAMEBUFFER_EXT or  
    READ_FRAMEBUFFER_EXT.  If the bind is successful no change is made  
    to the state of the bound framebuffer object, and any previous  
    binding to <target> is broken.  
  
    If a framebuffer object is bound to DRAW_FRAMEBUFFER_EXT or  
    READ_FRAMEBUFFER_EXT, it becomes the target for rendering or  
    readback operations, respectively, until it is deleted or another  
    framebuffer is bound to the corresponding bind point.  Calling  
    BindFramebufferEXT with <target> set to FRAMEBUFFER_EXT binds the  
    framebuffer to both DRAW_FRAMEBUFFER_EXT and READ_FRAMEBUFFER_EXT.  
  
    While a framebuffer object is bound, GL operations on the target  
    to which it is bound affect the images attached to the bound  
    framebuffer object, and queries of the target to which it is bound  
    return state from the bound object.  Queries of the values  
    specified in table 6.31 (Implementation Dependent Pixel Depths)  
    and table 8.nnn (Framebuffer-Dependent State Variables) are  
    derived from the framebuffer object bound to DRAW_FRAMEBUFFER_EXT.  
  
    The initial state of DRAW_FRAMEBUFFER_EXT and READ_FRAMEBUFFER_EXT  
    refers to the default framebuffer provided by the windowing  
    system.  In order that access to the default framebuffer is not  
    lost, it is treated as a framebuffer object with the name of 0.  
    The default framebuffer is therefore rendered to and read from  
    while 0 is bound to the corresponding targets.  On some  
    implementations, the properties of the default framebuffer can  
    change over time (e.g., in response to windowing system events  
    such as attaching the context to a new windowing system drawable.)"  
  
    Change the description of DeleteFramebuffersEXT as follows:  
  
    "<framebuffers> contains <n> names of framebuffer objects to be  
    deleted.  After a framebuffer object is deleted, it has no  
    attachments, and its name is again unused.  If a framebuffer that  
    is currently bound to one or more of the targets  
    DRAW_FRAMEBUFFER_EXT or READ_FRAMEBUFFER_EXT is deleted, it is as  
    though BindFramebufferEXT had been executed with the corresponding  
    <target> and <framebuffer> zero.  Unused names in <framebuffers>  
    are silently ignored, as is the value zero."  
  
  
    In section 4.4.2.2, modify the first two sentences of the  
    description of FramebufferRenderbufferEXT as follows:  
  
    "<target> must be DRAW_FRAMEBUFFER_EXT, READ_FRAMEBUFFER_EXT, or  
    FRAMEBUFFER_EXT.  If <target> is FRAMEBUFFER_EXT, it behaves as  
    though DRAW_FRAMEBUFFER_EXT was specified.  INVALID_OPERATION is  
    generated if the value of the corresponding binding is zero."  
  
    In section 4.4.2.3, modify the first two sentences of the  
    description of FramebufferTexturexDEXT as follows:  
  
    "In all three routines, <target> must be DRAW_FRAMEBUFFER_EXT,  
    READ_FRAMEBUFFER_EXT, or FRAMEBUFFER_EXT.  If <target> is  
    FRAMEBUFFER_EXT, it behaves as though DRAW_FRAMEBUFFER_EXT was  
    specified.  INVALID_OPERATION is generated if the value of the  
    corresponding binding is zero."  
  
    In section 4.4.4.2, modify the first sentence of the description  
    of CheckFramebufferStatusEXT as follows:  
  
    "If <target> is not DRAW_FRAMEBUFFER_EXT, READ_FRAMEBUFFER_EXT or  
    FRAMEBUFFER_EXT, INVALID_ENUM is generated.  If <target> is  
    FRAMEBUFFER_EXT, it behaves as though DRAW_FRAMEBUFFER_EXT was  
    specified."  
  
    Modify section 4.4.4.3 as follows:  
  
    "Attempting to render to or read from a framebuffer which is not  
    framebuffer complete will generate an  
    INVALID_FRAMEBUFFER_OPERATION_EXT error."  
      
  
  
homeprevnext Additions to Chapter 6 of the OpenGL 1.5 Specification (State and State Requests)
  
    In section 6.1.3, modify the first sentence of the description of  
    GetFramebufferAttachmentParameterivEXT as follows:  
  
    "<target> must be DRAW_FRAMEBUFFER_EXT, READ_FRAMEBUFFER_EXT or  
    FRAMEBUFFER_EXT.  If <target> is FRAMEBUFFER_EXT, it behaves as  
    though DRAW_FRAMEBUFFER_EXT was specified."  
  
  
homeprevnext GLX Protocol
  
    BlitFramebufferEXT  
        2        44              rendering command length  
        2        4330            rendering command opcode  
        4        CARD32          source X0  
        4        CARD32          source Y0  
        4        CARD32          source X1  
        4        CARD32          source Y1  
        4        CARD32          destination X0  
        4        CARD32          destination Y0  
        4        CARD32          destination X1  
        4        CARD32          destination Y1  
        4        CARD32          mask  
        4        ENUM            filter  
  
homeprevnext Dependencies on ARB_color_buffer_float
  
    The reference to CLAMP_FRAGMENT_COLOR_ARB in section 4.3.3 applies  
    only if ARB_color_buffer_float is supported.  
  
homeprevnext Errors
  
    The error INVALID_FRAMEBUFFER_OPERATION_EXT is generated if  
    BlitFramebufferEXT, DrawPixels, or CopyPixels is called while the  
    draw framebuffer is not framebuffer complete.  
  
    The error INVALID_FRAMEBUFFER_OPERATION_EXT is generated if  
    BlitFramebufferEXT, ReadPixels, CopyPixels, CopyTex{Sub}Image*,  
    CopyColor{Sub}Table, or CopyConvolutionFilter* is called while the  
    read framebuffer is not framebuffer complete.  
  
    The error INVALID_VALUE is generated by BlitFramebufferEXT if  
    <mask> has any bits set other than those named by  
    COLOR_BUFFER_BIT, DEPTH_BUFFER_BIT or STENCIL_BUFFER_BIT.  
  
    The error INVALID_OPERATION is generated if BlitFramebufferEXT is  
    called and <mask> includes DEPTH_BUFFER_BIT or STENCIL_BUFFER_BIT  
    and <filter> is not NEAREST.  
  
    The error INVALID_OPERATION is generated if BlitFramebufferEXT is  
    called and <mask> includes DEPTH_BUFFER_BIT or STENCIL_BUFFER_BIT  
    and the source and destination depth or stencil buffer formats do  
    not match.  
  
    The error INVALID_ENUM is generated by BlitFramebufferEXT if  
    <filter> is not LINEAR or NEAREST.  
  
    The error INVALID_OPERATION is generated if BlitFramebufferEXT   
    is called within a Begin/End pair.  
  
    The error INVALID_ENUM is generated if BindFramebufferEXT,  
    CheckFramebufferStatusEXT, FramebufferTexture{1D|2D|3D}EXT,  
    FramebufferRenderbufferEXT, or  
    GetFramebufferAttachmentParameterivEXT is called and <target> is  
    not DRAW_FRAMEBUFFER_EXT, READ_FRAMEBUFFER_EXT or FRAMEBUFFER_EXT.  
  
homeprevnext New State
  
    (modify table 3.nnn, "Framebuffer (state per framebuffer target binding point)")  
  
    Get Value                     Type   Get Command   Initial Value    Description               Section       Attribute  
    ----------------------------  ----   -----------   --------------   -------------------       ------------  ---------  
    DRAW_FRAMEBUFFER_BINDING_EXT   Z+    GetIntegerv   0                framebuffer object bound  4.4.1         -  
                                                                        to DRAW_FRAMEBUFFER_EXT  
    READ_FRAMEBUFFER_BINDING_EXT   Z+    GetIntegerv   0                framebuffer object        4.4.1         -  
                                                                        to READ_FRAMEBUFFER_EXT  
  
    Remove reference to FRAMEBUFFER_BINDING_EXT.  
  
  
Sample Code  
  
    /* Render to framebuffer object 2 */  
    BindFramebufferEXT(DRAW_FRAMEBUFFER_EXT, 2);  
    RenderScene();  
  
    /* Blit contents of color buffer, depth buffer and stencil buffer  
     * from framebuffer object 2 to framebuffer object 1.  
     */  
    BindFramebufferEXT(READ_FRAMEBUFFER_EXT, 2);  
    BindFramebufferEXT(DRAW_FRAMEBUFFER_EXT, 1);  
    BlitFramebufferEXT(0, 0, 640, 480,  
                       0, 0, 640, 480,  
                       GL_COLOR_BUFFER_BIT |  
                       GL_DEPTH_BUFFER_BIT |  
                       GL_STENCIL_BUFFER_BIT,  
                       GL_NEAREST);  
  
    /* Blit contents of color buffer from framebuffer object 1 to  
     * framebuffer object 2, inverting the image in the X direction.  
     */  
    BindFramebufferEXT(READ_FRAMEBUFFER_EXT, 1);  
    BindFramebufferEXT(DRAW_FRAMEBUFFER_EXT, 2);  
    BlitFramebufferEXT(0, 0, 640, 480,  
                       640, 0, 0, 480,  
                       GL_COLOR_BUFFER_BIT,  
                       GL_NEAREST);  
  
    /* Blit color buffer from framebuffer object 1 to framebuffer  
     * object 3 with a 2X zoom and linear filtering.  
     */  
    BindFramebufferEXT(READ_FRAMEBUFFER_EXT, 1);  
    BindFramebufferEXT(DRAW_FRAMEBUFFER_EXT, 3);  
    BlitFramebufferEXT(0, 0, 640, 480,  
                       0, 0, 1280, 960,  
                       GL_COLOR_BUFFER_BIT, GL_LINEAR);  
  
  
homeprevnext Issues
  
    1) Should we pass in explicit source/dest rects instead of using  
       the rasterpos/pixelzoom?  
  
        Resolved: use explicit rects, so we don't need to perform  
        multiple state changes.  
  
    2) Should rects be (start,size) or (start,end)?  
  
        Resolved: use (start,end).  This is a break from the past  
        (scissor, viewport) but is more intuitive than allowing a  
        negative size where mirrored zooms are desireable.  
  
    3) What should we call the blit function?  
  
        Resolved: BlitFramebufferEXT  
  
    4) Should filtering apply to depth or stencil values?  
  
        Resolved: No  
  
    5) What happens if LINEAR is specified and DEPTH or STENCIL is in  
       the mask?  
  
        Resolved: Generate ERROR_INVALID_OPERATION  
  
    6) What happens if READ_FRAMEBUFFER is NONE and a read is  
       attempted?  
  
        Resolved: Generate ERROR_INVALID_OPERATION  
  
    7) Should we generalize binding point assignment with a single  
       entry point and a parameter specifying read/write/whatever?  
  
        Resolved: concensus leans toward separate Read/Draw entry  
        points.  
  
    8) Should we define READ_FRAMEBUFFER and DRAW_FRAMEBUFFER targets  
       for BindFramebuffer instead of introducing a new level of  
       indirection?  
  
        Resolved: Yes.  Binding to the legacy target FRAMEBUFFER sets  
        both DRAW_FRAMEBUFFER and READ_FRAMEBUFFER.  Querying  
        FRAMEBUFFER_BINDING return the DRAW_FRAMEBUFFER_BINDING.  
  
    9) What happens when a user queries framebuffer attributes,  
       e.g. Get(RED_BITS)?  Is the result returned from  
       READ_FRAMEBUFFER or DRAW_FRAMEBUFFER?  Do we need a new query?  
       e.g.  
  
       GetFramebufferParameteriv(int target, enum pname, int* value)  
  
        Resolved: always return the value associated with the  
        DRAW_FRAMEBUFFER.  Do not add a new query.  
  
    10) How does Accum behave in the presence of separate READ/DRAW  
        framebuffers?  
  
        Resolved: Accum returns INVALID_OPERATION if the  
        READ_FRAMEBUFFER and DRAW_FRAMEBUFFER bindings are not  
        identical.  
  
    11) Should blits be allowed between buffers of different bit sizes?  
  
        Resolved: Yes, for color buffers only.  Attempting to blit  
        between depth or stencil buffers of different size generates  
        INVALID_OPERATION.  
  
    12) Should we add support for multiple ReadBuffers, so that  
        multiple color buffers may be copied with a single call to  
        BlitFramebuffer?  
  
	Resolved: No, we considered this but the behavior is awkward  
	to define and the functionality is of limited use.  
  
    13) How should BlitFramebuffer color space conversion be  
        specified?  Do we allow context clamp state to affect the  
        blit?  
  
        Resolved: Blitting to a fixed point buffer always clamps,  
        blitting to a floating point buffer never clamps.  The context  
        state is ignored.  
  
    14) Should overlapped blits be allowed?  Should they be guaranteed  
        to work?  
  
        Resolved: Overlapping blits are allowed but are undefined.  
  
  
homeprevnext Revision History
  
    Revision 14, 2006/09/29  
      - Changed the resolution of issue 12 to reflect the working  
        group decision to abandon ReadBuffers.  
      - Eliminated issues 15, 16 and 17 as they are no longer relevent.  
      - Changed the resolution of issue 14 and the corresponding spec  
        language to indicate that the result of an overlapping blit is  
        undefined.  
      - Changed the spec language to clarify that the lower bound of a  
        blit rectangle is inclusive while the upper bound is  
        exclusive.  
      - Added a sample showing an inverted blit, to clarify the pixel  
        addressing rules.  
      - Clarified spec language and error behavior to indicate that  
        blitting DEPTH and STENCIL buffers with LINEAR filtering is  
        always disallowed, whether or not the blit is scaling.  
    Revision 13, 2006/06/01 (Jeff Juliano)  
      - Clarify errors generated when read and draw framebuffers are  
        incomplete.  
    Revision 12, 2005/12/22 (Jon Leech)  
      - Assigned enumerant values. Add return type to BlitFramebufferEXT.  
	Note INVALID_ENUM error if filter is not LINEAR or NEAREST.  
    Revision 11, 2005/12/14  
      - Added several missing conditions to the Errors section.  
      - Changed status to "Complete".  
    Revision 10, 2005/11/6  
      - Removed all ReadBuffers discussion, as this functionality will  
        be deferred.  Issues 15-17 are hereafter irrelevent.  
    Revision 9, 2005/10/31  
      - Resolved issue 16 and updated language to reflect this decision.  
      - Minor language changes per feedback.  
      - Added issue 17 and resolution, although language does not reflect this.  
    Revision 8, 2005/10/20  
      - Added ReadBuffersEXT language  
      - Removed some redundant language in ReadBuffer  
      - Re-opened issue 15 for further consideration  
      - Added issue 16  
    Revision 7, 2005/10/7  
      - Added issues 13 and 14, and resolution for 11, 13, and 14.  
      - Added dependency on ARB_color_buffer_float.  
      - Removed multisample language, now covered in EXT_framebuffer_multisample.  
      - Added framebuffer incomplete error language to spec proper.  
      - Alias DRAW_FRAMEBUFFER_BINDING_EXT to FRAMEBUFFER_BINDING_EXT.  
      - Updated Overview text to reflect the resolution to issue 8.  
    Revision 6, 2005/9/26  
      - Moved issues to the end, per new conventions.  
      - Added new language referring to DRAW_FRAMEBUFFER and  
        READ_FRAMEBUFFER bind points to sections 4.1.1, 4.4.1,  
        4.4.2.2, 4.4.2.3, 4.4.4.2, 6.1.3 and Errors, and updated the  
        example code, per resolution of issue 8.  
      - Added language in section 4.4.1 specifying Get behavior, per  
        resolution of issue 9.  
      - Added language to section 4.2.4 describing new error behavior  
        for Accum, per resolution of issue 10.  
      - Added language to section 4.3.3 describing color format  
        conversion, per resolution of issue 11.  
    Revision 5, 2005/9/6  
      - Added issues 8 - 11  
      - Minor edits from reviewer feedback  
    Revision 4, 2005/9/5  
      - Added chapter 4 intro section  
      - Added errors and state table information  
      - Added sample code  
      - fixed typos  
    Revision 3, 2005/8/29  
      - Converted to spec template  
    Revision 2, 2005/7/18  
      - Lots of new issues added and resolved  
    Revision 1, 2005/7/5  
      - Initial draft  
      - Initial draft  
Valid XHTML 1.1! Valid CSS! Last update: November 14, 2006.
Cette page doit être lue avec un navigateur récent respectant le standard XHTML 1.1.