diff -r 000000000000 -r 6474c204b198 gfx/angle/extensions/ANGLE_pack_reverse_row_order.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/angle/extensions/ANGLE_pack_reverse_row_order.txt Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,168 @@ +Name + + ANGLE_pack_reverse_row_order + +Name Strings + + GL_ANGLE_pack_reverse_row_order + +Contact + + Daniel Koch, TransGaming (daniel 'at' transgaming.com) + +Contributors + + Brian Salomon + Daniel Koch + +Status + + Implemented in ANGLE ES2 + +Version + + Last Modified Date: February 22, 2011 + Author Revision: 22 + +Number + + OpenGL ES Extension #110 + +Dependencies + + OpenGL 1.5 or OpenGL ES 1.0 are required. + + Some of the functionality of this extension is not supported + when implemented against OpenGL ES. + + EXT_texture_rg interacts with this extension. + + The extension is written against the OpenGL 3.2 Specification + (Core Profile). + +Overview + + This extension introduces a mechanism to allow reversing the order + in which image rows are written into a pack destination. This + effectively allows an application to flip the results of a ReadPixels + in the y direction operation without having to render upside down. + + The coordinate system of OpenGL is vertically reversed in comparison to a + number of other graphics systems such as native windowing APIs. Applications + that perform ReadPixels may have to either render to an intermediate color + buffer before calling ReadPixels or perform a flip in software after + ReadPixels. In some systems the GL can perform the row reversal during + ReadPixels without incurring additional cost. + +IP Status + + No known IP claims. + +New Procedures and Functions + + None + +New Types + + None + +New Tokens + + Accepted by the parameter of PixelStore{if}, GetIntegerv(), + GetBooleanv(), and GetFloatv(): + + PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 + +Additions to Chapter 3 of the OpenGL 3.2 Specification (Rasterization) + + In Section 4.3.1 (Reading Pixels) add a row to table 4.7: + + +------------------------------+---------+---------------+-------------+ + | Parameter Name | Type | Initial Value | Valid Range | + +------------------------------+---------+---------------+-------------+ + | PACK_REVERSE_ROW_ORDER_ANGLE | boolean | FALSE | TRUE/FALSE | + +------------------------------+---------+---------------+-------------+ + + In Section 4.3.1 (Reading Pixels) modify the second paragraph of subsection + "Placement in Pixel Pack Buffer or Client Memory" to read: + + When PACK_REVERSE_ROW_ORDER_ANGLE is FALSE groups of elements are placed + in memory just as they are taken from memory when transferring pixel + rectangles to the GL. That is, the ith group of the jth row + (corresponding to the ith pixel in the jth row) is placed in memory just + where the ith group of the jth row would be taken from when transferring + pixels. See Unpacking under section 3.7.2. The only difference is that + the storage mode parameters whose names begin with PACK_ are used + instead of those whose names begin with UNPACK_. If the format is RED, + GREEN, BLUE, or ALPHA, only the corresponding single element is written. + Likewise if the format is RG, RGB, or BGR, only the corresponding two or + three elements are written. Otherwise all the elements of each group are + written. When PACK_REVERSE_ROW_ORDER_ANGLE is TRUE the order of the rows + of elements is reversed before the data is packed. That is, the element + corresponding to pixel (x, y + height - 1) becomes the first element + packed, followed by (x + 1, y + height - 1), etc. Otherwise, pixel data + is packed in the same manner as when PACK_REVERSE_ROW_ORDER_ANGLE is + FALSE. + +Additions to Chapter 6 of the OpenGL 3.2 Specification (State and State Requests) + + In Section 6.1.4 add the following sentence to the fifth paragraph + (beginning with "For three-dimensional and two-dimensional array + textures..."): + When PACK_REVERSE_ROW_ORDER_ANGLE is TRUE the order of rows within + each image are reversed without reordering the images themselves. + +Dependencies on OpenGL ES + + If implemented for OpenGL ES, this extension behaves as specified, except: + + -Delete all references to formats RED, GREEN, BLUE, RG, and BGR. + + -The language about image order in Section 6.1.4 does not apply as OpenGL ES + does not have GetTexImage. + +Dependencies on EXT_texture_rg + + If EXT_texture_rg is present reinsert language about formats RED and RG + into the OpenGL ES 2.0 specification. + +Errors + + None + +New State + Initial + Get Value Type Get Command Value Description Sec. + --------- ---- ----------- ------- ----------- ---- + PACK_REVERSE_ROW_ORDER_ANGLE B GetIntegerv FALSE Pixel pack row order reversal 4.3.1 + +New Implementation Dependent State + + None + +Issues + + None + +Sample Code + + /* Allocate space to hold the pixel data */ + const GLvoid* pixels = malloc(width * height * 4); + + /* Bind the framebuffer object to be read */ + glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer); + + /* Enable row order reversal */ + glPixelStore(GL_PACK_REVERSE_ROW_ORDER_ANGLE, TRUE); + + /* The pixel data stored in pixels will be in top-down order, ready for + * use with a windowing system API that expects this order. + */ + glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); + +Revision History + + Revision 1, 2011/11/22 (Brian Salomon) + - First version + Revision 2, 2012/02/22 (dgkoch) + - prepare for publishing