2011-11-23 18:53:10 +04:00
|
|
|
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
|
|
|
|
|
2012-02-22 09:07:44 +04:00
|
|
|
Implemented in ANGLE ES2
|
2011-11-23 18:53:10 +04:00
|
|
|
|
|
|
|
Version
|
|
|
|
|
2012-02-22 09:07:44 +04:00
|
|
|
Last Modified Date: February 22, 2011
|
|
|
|
Author Revision: 22
|
2011-11-23 18:53:10 +04:00
|
|
|
|
|
|
|
Number
|
|
|
|
|
2013-03-01 03:04:02 +04:00
|
|
|
OpenGL ES Extension #110
|
2011-11-23 18:53:10 +04:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2012-02-22 09:07:44 +04:00
|
|
|
Additions to Chapter 6 of the OpenGL 3.2 Specification (State and State Requests)
|
|
|
|
|
2011-11-23 18:53:10 +04:00
|
|
|
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
|
|
|
|
|
2012-02-22 09:07:44 +04:00
|
|
|
Issues
|
|
|
|
|
|
|
|
None
|
|
|
|
|
2011-11-23 18:53:10 +04:00
|
|
|
Sample Code
|
|
|
|
|
|
|
|
/* Allocate space to hold the pixel data */
|
|
|
|
const GLvoid* pixels = malloc(width * height * 4);
|
|
|
|
|
|
|
|
/* Bind the framebuffer object to be read */
|
2012-02-22 09:07:44 +04:00
|
|
|
glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);
|
2011-11-23 18:53:10 +04:00
|
|
|
|
|
|
|
/* Enable row order reversal */
|
2012-02-22 09:07:44 +04:00
|
|
|
glPixelStore(GL_PACK_REVERSE_ROW_ORDER_ANGLE, TRUE);
|
2011-11-23 18:53:10 +04:00
|
|
|
|
|
|
|
/* The pixel data stored in pixels will be in top-down order, ready for
|
|
|
|
* use with a windowing system API that expects this order.
|
|
|
|
*/
|
2012-02-22 09:07:44 +04:00
|
|
|
glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
2011-11-23 18:53:10 +04:00
|
|
|
|
|
|
|
Revision History
|
|
|
|
|
|
|
|
Revision 1, 2011/11/22 (Brian Salomon)
|
|
|
|
- First version
|
2012-02-22 09:07:44 +04:00
|
|
|
Revision 2, 2012/02/22 (dgkoch)
|
|
|
|
- prepare for publishing
|