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