| Name |
| |
| EXT_unpack_subimage |
| |
| Name Strings |
| |
| GL_EXT_unpack_subimage |
| |
| Contact |
| |
| Peter Pipkorn, NVIDIA Corporation (ppipkorn 'at' nvidia.com) |
| |
| Contributors |
| |
| Daniel Kartch, NVIDIA Corporation (dkartch 'at' nvidia.com) |
| Nicolai de Haan, NVIDIA Corporation (nicolaid 'at' nvidia.com) |
| Daniel Koch, NVIDIA Corporation (dkoch 'at' nvidia.com) |
| |
| Status |
| |
| Complete. |
| |
| Version |
| |
| Last Modifed Date: Feb 8, 2013 |
| Author Revision: 2 |
| |
| Number |
| |
| OpenGL ES Extension #90 |
| |
| Dependencies |
| |
| The extension is written against the OpenGL ES 2.0 specification. |
| The extension references the OpenGL 2.0 specification. |
| |
| Overview |
| |
| This OpenGL ES 2.0 extension adds support for GL_UNPACK_ROW_LENGTH, |
| GL_UNPACK_SKIP_ROWS and GL_UNPACK_SKIP_PIXELS as valid enums to |
| PixelStore. The functionality is the same as in OpenGL. These are |
| useful for updating textures with a sub-rectangle of pixel data |
| coming from a larger image in host memory. |
| |
| IP Status |
| |
| None |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted by the <pname> parameters of PixelStorei, GetIntegerv, and |
| GetFloatv: |
| |
| GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 |
| GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 |
| GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 |
| |
| Additions to the OpenGL ES 2.0 Specification |
| |
| Modifications to Table 3.1 (PixelStore parameters) |
| |
| Add the following entries: |
| |
| Parameter Name Type Initial Value Valid Range |
| ============== ==== ============= =========== |
| UNPACK_ROW_LENGTH_EXT integer 0 [0,Infinity) |
| UNPACK_SKIP_ROWS_EXT integer 0 [0,Infinity) |
| UNPACK_SKIP_PIXELS_EXT integer 0 [0,Infinity) |
| |
| Modifications to 3.6.2 Transfer of Pixel Rectangles, in the Unpacking |
| section: |
| |
| Change |
| |
| "The number of groups in a row is width;" |
| |
| to |
| |
| "If the value of UNPACK_ROW_LENGTH_EXT is not positive, then the |
| number of groups in a row is <width>; otherwise the number of |
| groups is UNPACK_ROW_LENGTH_EXT." |
| |
| After the sentence |
| |
| "If the number of bits per element is not 1, 2, 4 or 8 times |
| the number of bits in a GL ubyte, then k = nl for all values |
| of a." |
| |
| insert: |
| |
| "There is a mechanism for selecting a sub-rectangle of groups |
| from a larger containing rectangle. This mechanism relies on |
| three integer parameters: UNPACK_ROW_LENGTH_EXT, UNPACK_SKIP_ROWS_EXT, |
| and UNPACK_SKIP_PIXELS_EXT. Before obtaining the first group from |
| memory, the pointer supplied to TexImage2D is effectively |
| advanced by (UNPACK_SKIP_PIXELS_EXT)n + (UNPACK_SKIP_ROWS_EXT)k |
| elements. Then <width> groups are obtained from contiguous |
| elements in memory (without advancing the pointer), after |
| which the pointer is advanced by k elements. <height> sets of |
| <width> groups of values are obtained this way. See figure |
| 3.6." |
| |
| Before Table 3.5 Packed pixel formats, insert |
| |
| Figure 3.8 from the OpenGL 2.0 specification (a visual |
| description of UNPACK_ROW_LENGTH_EXT, UNPACK_SKIP_ROWS_EXT, and |
| UNPACK_SKIP_PIXELS_EXT) |
| |
| Errors |
| |
| None |
| |
| New State |
| |
| Modifications to Table 6.12 Pixels in section 6.2 State Tables: |
| |
| Get Value Type Get Cmnd Initial Description Sec. |
| Value |
| ==================== ==== =========== ======= =============================== ===== |
| UNPACK_ROW_LENGTH_EXT Z+ GetIntegerv 0 Value of UNPACK_ROW_LENGTH_EXT 3.6.1 |
| UNPACK_SKIP_ROWS_EXT Z+ GetIntegerv 0 Value of UNPACK_SKIP_ROWS_EXT 3.6.1 |
| UNPACK_SKIP_PIXELS_EXT Z+ GetIntegerv 0 Value of UNPACK_SKIP_PIXELS_EXT 3.6.1 |
| |
| Issues |
| |
| 1. Can't this be done with repeated calls to |
| TexSubImage2D/TexSubImage3D? |
| |
| Yes, it is possible to unpack pixels from a sub-rectangle in |
| host memory by by calling these functions for one line at a |
| time, but this could add unnecessary burden on the CPU system. |
| Specifying GL_UNPACK_ROW_LENGTH_EXT makes it possible to unpack |
| sub-rectangles of pixels with lower overhead. |
| |
| 2. Should the corresponding PACK enums be added? |
| |
| No, it should be done in a separate extension. There is no |
| dependency between the PACK enums and the UNPACK enums. |
| |
| 3. Are these UNPACK_SKIP_* tokens strictly necessary? |
| |
| No. The same functionality can be achieved by advancing the |
| pixel pointer to host memory appropriately before issuing an |
| unpacking function call. They are included here for both |
| completeness and for convenience. |
| |
| 4. Should the new tokens be suffixed? |
| |
| Yes. This extension was originally drafted with unsuffixed tokens |
| since they provide the same functionality as in core Desktop GL. |
| However, the policy of the ES working group is that suffixes |
| must be used in extensions even for functionality that is core |
| in Desktop GL. |
| |
| Revision History |
| |
| Rev. Date Author Changes |
| ---- -------- --------- ------------------------------------ |
| 1 03/25/11 ppipkorn First revision. |
| 2 02/08/13 dgkoch add suffixes to tokens |
| remove unnecessary column from table 6.12 edits |