Name NV_pack_subimage Name Strings GL_NV_pack_subimage Contact Peter Pipkorn, NVIDIA Corporation (ppipkorn 'at' nvidia.com) Contributors Pat Brown, NVIDIA Nicolai de Haan, NVIDIA Greg Roth, NVIDIA Status Complete. Version Last Modifed Date: Oct 07, 2012 Author Revision: 3 Number OpenGL ES Extension #132 Dependencies OpenGLES 2.0 is required. The extension is written against the OpenGL ES 2.0.25 specification. EXT_unpack_subimage is required. Overview This OpenGL ES 2.0 extension adds support for GL_PACK_ROW_LENGTH_NV, GL_PACK_SKIP_ROWS_NV and GL_PACK_SKIP_PIXELS_NV as valid enums to PixelStore. The functionality is the same as in OpenGL. These are useful to update a sub-rectangle in host memory with data that can be read from the framebuffer or a texture (using FBO and texture attachments). New Procedures and Functions None New Tokens Accepted by the parameters of PixelStorei, GetIntegerv, and GetFloatv: GL_PACK_ROW_LENGTH_NV 0x0D02 GL_PACK_SKIP_ROWS_NV 0x0D03 GL_PACK_SKIP_PIXELS_NV 0x0D04 Additions to the OpenGL ES 2.0 Specification Modifications to Table 3.4 (PixelStore parameters for ReadPixels) Add the following entries: Parameter Name Type Initial Value Valid Range ============== ==== ============= =========== PACK_ROW_LENGTH_NV integer 0 [0,Infinity) PACK_SKIP_ROWS_NV integer 0 [0,Infinity) PACK_SKIP_PIXELS_NV integer 0 [0,Infinity) Note: The description of the behavior of the added PACK* PixelStore parameters is covered by the following existing text from 4.3.1 subsection "Placement in Client Memory": Groups of elements are placed in memory just as they are taken from memory for TexImage2D. 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 for TexImage2D. See Unpacking under section 3.6.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_. The equivalent UNPACK_ storage mode parametes are documented by the text added by EXT_unpack_subimage. As such, no additional documentation language is required here. Errors None New State Modifications to Table 6.12 Pixels in section 6.2 State Tables: Get Value Type Get Cmnd Initial Description Sec. Attribute Value ==================== ==== =========== ======= ============================ ===== =========== PACK_ROW_LENGTH_NV Z+ GetIntegerv 0 Value of PACK_ROW_LENGTH_NV 4.3.1 pixel-store PACK_SKIP_ROWS_NV Z+ GetIntegerv 0 Value of PACK_SKIP_ROWS_NV 4.3.1 pixel-store PACK_SKIP_PIXELS_NV Z+ GetIntegerv 0 Value of PACK_SKIP_PIXELS_NV 4.3.1 pixel-store Issues 1. Can't this be done with repeated calls to ReadPixels? RESOLVED: Yes, it is possible to pack pixels into a sub- rectangle in host memory by by calling this function for one line at a time with of 1 advancing the pointer each time, but this could add unnecessary burden on the CPU system. Specifying GL_PACK_ROW_LENGTH_NV makes it possible to pack sub-rectangles of pixels with lower overhead. 2. Should the corresponding UNPACK enums be added? RESOLVED: No, it should be done in a separate extension. There is no functional dependency between the PACK enums and the UNPACK enums. However, there is a language dependency. This extension extends the language added by EXT_unpack_subimage. Since this is intended to ship on platforms that support both, Nothing is lost by adding a dependency for this reason. 3. Are these PACK_SKIP_* tokens strictly necessary? RESOLVED: No. The same functionality can be achieved by advancing the pixel pointer to host memory appropriately before issuing an packing function call. They are included here for both completeness and for convenience. 4. Should PACK_SKIP_IMAGES and PACK_IMAGE_HEIGHT be included? RESOLVED: No. Without support for GetTexImage, their inclusion makes less sense. The UNPACK_* equivalents were also left out of EXT_unpack_subimage, which makes adding them here more complicated to do right. Revision History Rev. Date Author Changes ---- ------------ --------- ------------------------------------- 3 07 Nov 2012 groth Added issue clarifications and a note about existing spec language. 2 23 Oct 2012 groth Removed references to 3D texture images. 1 02 Oct 2009 ppipkorn Original draft.