| 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 <pname> 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 |