| XXX - Not complete. |
| |
| Name |
| |
| SGIX_slim |
| |
| Name Strings |
| |
| GL_SGIX_slim |
| |
| Version |
| |
| $Date: 1998/08/03 19:03:02 $ $Revision: 1.11 $ |
| |
| Number |
| |
| ??? |
| |
| Dependencies |
| |
| This extension depends on the ycrcbformat, and subsample extensions. |
| |
| Overview |
| |
| This extension defines a mechanism to draw and read SLIM (Rice) |
| compressed images. SLIM is a lossless compression technique |
| derived from a scheme developed by Robert F. Rice, Pen-Shu Yeh, |
| and Warner Miller. The scheme works well on data (images) |
| composed of relatively small integers, 8-12 bits. The specifics |
| of the algorithm used in OpenGL are not included in this spec. |
| If the extension were made public we would have to include such |
| a specification. SLIM supports 8, 10, and 12 bit components, |
| one to four components per pixel, and two alternative component |
| samplings beyond uniform (422 and 4224). NOTE: that for |
| compatibility reasons the older Rice format images will also be |
| supported. |
| The specification of color space and component subsampling is |
| accomplished through the subsample and ycrcbformat extensions. |
| SLIM compression is specified through the <type> parameter to |
| DrawPixels, ReadPixels. Six data types are supported, |
| corresponding to unsigned 8 and 10 bit components, and signed |
| 12 bit components (SLIM8U_SGIX, SLIM10U_SGIX, SLIM12S_SGIX, and |
| RICE8U_SGIX, RICE10U_SGIX, RICE12S_SGIX). PixelStore |
| parameters are used to specify and query compressed image |
| size. |
| |
| Issues |
| |
| - The SLIM/RICE compression/decompression algorithm is not |
| defined/described in this extension. |
| |
| - Rice now shows up explicitly as an input <type> is that a |
| problem? This is a person (Robert Rice). |
| |
| - Do we really need a header to store the image size? Could |
| this be passed as a separate parameter? |
| |
| A: We looked into passing the sizes as pixel storage |
| parameters, but ran into problems with the async extension. |
| If the size is GL state, it's difficult to come up with an |
| implementation-friendly spec for when the state is updated. |
| Also it's difficult to allow more than one asynchronous read |
| outstanding in this case. Putting the data in a header has |
| the advantage that it keeps the length associated with |
| the image data automatically. |
| |
| New Procedures and |
| Functions |
| |
| None. |
| |
| New Tokens |
| |
| Accepted by the <pname> parameter of PixelStoref, PixelStorei, |
| GetBooleanv, GetIntegerv, GetFloatv and GetDoublev: |
| |
| PACK_MAX_COMPRESSED_SIZE_SGIX 0x831B |
| |
| Accepted by the <type> parameter of all routines which take |
| one or two dimensional color pixel data from client memory or |
| write it to client memory including DrawPixels, ReadPixels, |
| TexImage2D, GetTexImage2D, GetHistogramEXT, GetMinmaxEXT, |
| ConvolutionFilter2DEXT, and ColorTableSGI: |
| |
| SLIM8U_SGIX 0x831D |
| SLIM10U_SGIX 0x831E |
| SLIM12S_SGIX 0x831F |
| RICE8U_SGIX |
| RICE10U_SGIX |
| RICE12S_SGIX |
| |
| Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation) |
| |
| None. |
| |
| Additions to Chapter 3 of the 1.1 Specification (Rasterization) |
| |
| 3.6.3 Rasterization of Pixel Rectangles |
| |
| The SLIM/RICE <type>s are added to Table 3.4: |
| |
| <type> Parameter Corresponding Special |
| Token Value GL Data Type Interpretation |
| ---------------- ------------- -------------- |
| UNSIGNED_BYTE ubyte No |
| BYTE byte No |
| UNSIGNED_SHORT ushort No |
| SHORT short No |
| UNSIGNED_INT uint No |
| INT int No |
| FLOAT float No |
| BITMAP ubyte Yes |
| UNSIGNED_BYTE_3_3_2_EXT ubyte Yes |
| UNSIGNED_SHORT_4_4_4_4_EXT ushort Yes |
| UNSIGNED_SHORT_5_5_5_1_EXT ushort Yes |
| UNSIGNED_INT_8_8_8_8_EXT uint Yes |
| UNSIGNED_INT_10_10_10_2_EXT uint Yes |
| SLIM8U_SGIX float Yes |
| SLIM10U_SGIX float Yes |
| SLIM12S_SGIX float Yes |
| RICE8U_SGIX float Yes |
| RICE10U_SGIX float Yes |
| RICE12S_SGIX float Yes |
| |
| <Before the Unpacking section> |
| |
| Decompression |
| |
| This step only applies if the <type> parameter to DrawPixels |
| is set to one of SLIM8U_SGIX, SLIM10U_SGIX, SLIM12S_SGIX, |
| RICE8U_SGIX, RICE10U_SGIX, or RICE12S_SGIX. These types |
| indicate that the image is compressed using SLIM or Rice |
| compression, respectively. The images are stored as a header |
| containing a GLsizei value giving the length of compressed |
| image in bytes followed by the compressed image data. For |
| correct operation, the data pointer passed to DrawPixels must |
| obey any alignment restrictions imposed by the host |
| architecture on the GLsizei data type. If the data is not |
| correctly aligned, the results are undefined. (This |
| restriction is analogous to the restriction tacitly placed on |
| the image pointer passed to DrawPixels when the type is INT. |
| The GL implementation must be able to dereference the pointer |
| as a GLint value without getting a bus error.) If the width |
| or height argument is zero, the data pointer is not |
| dereferenced and so a NULL pointer may be passed in. |
| |
| The compressed byte stream is passed to the GL and interpreted |
| as defined by the <type>, and <format> parameters to |
| DrawPixels, and the UNPACK_SAMPLING_SGIX parameter to |
| PixelStore. The width of the image represented by the byte |
| stream is determined by UNPACK_ROW_LENGTH, if it is positive, |
| and the <width> parameter to DrawPixels, otherwise. The |
| height of the image represented by the byte stream is |
| determined by UNPACK_IMAGE_HEIGHT_EXT, if it is positive, and |
| the <height> parameter to DrawPixels, otherwise. |
| |
| ?? since we don't support subimage should the UNPACK parameters |
| be ignored?? |
| |
| |
| If the PixelStore parameters UNPACK_ROW_LENGTH, |
| UNPACK_SKIP_ROWS, and UNPACK_SKIP_PIXELS, and the DrawPixel |
| parameters <width> and <height> indicate that a sub-image is to |
| be drawn an error INVALID_OPERATION is issued. |
| |
| The output of the decompression algorithm is a sequence of |
| unsigned bytes or signed shorts corresponding to an |
| uncompressed image. The downstream GL mechanisms should proceed |
| as if the PixelStore parameters UNPACK_ROW_LENGTH, |
| UNPACK_SKIP_ROWS, and UNPACK_SKIP_PIXELS are all equal to zero. |
| The components of a SLIM/RICE image are mapped to GL <types> that do |
| not have special interpretation, FLOAT. |
| |
| The pixel storage parameters UNPACK_SWAP_BYTES, |
| UNPACK_LSB_FIRST, and UNPACK_ALIGNMENT are ignored for |
| compressed images. |
| |
| Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations |
| and the Frame Buffer) |
| |
| 4.3.2 Reading Pixels |
| |
| The following entries are added to Table 4.5: |
| |
| Parameter Name Type Initial Value Valid Range |
| -------------- ---- ------------- ----------- |
| PACK_MAX_COMPRESSED_SIZE_SGIX integer 0 [0,inf) |
| |
| The following needs to be added to the end of the "Final |
| Conversion" subsection: If the <type> parameter to ReadPixels |
| is one of SLIM8U_SGIX, SLIM10U_SGIX, SLIM12S_SGIX, RICE8U_SGIX, |
| RICE10U_SGIX, or RICE12S_SGIX the components are converted to |
| UNSIGNED_BYTE and SIGNED_SHORT as appropriate. |
| |
| ??? |
| |
| <Before the section "Placement in Client Memory"> |
| |
| Compression |
| |
| This step only applies if the <type> parameter to ReadPixels is |
| set to one of SLIM8U_SGIX, SLIM10U_SGIX, SLIM12S_SGIX, |
| RICE8U_SGIX, RICE10U_SGIX, or RICE12S_SGIX. The pixel stream |
| being read is compressed as defined by the <type> and <format> |
| parameters to ReadPixels, and the PACK_SAMPLING_SGIX parameter |
| to PixelStore. The output of this step is a byte stream of |
| compressed image data. |
| |
| Placement in Client Memory, Uncompressed Images |
| |
| If the <type> parameter to ReadPixels is not one of SLIM/RICE* then |
| the pixels of the image are transferred to host memory as |
| described in this section. etc... |
| |
| Placement in Client Memory, Compressed Images |
| |
| This step only applies if the <type> parameter to ReadPixels |
| is set to one of SLIM8U_SGIX, SLIM10U_SGIX, SLIM12S_SGIX, |
| RICE8U_SGIX, RICE10U_SGIX, or RICE12S_SGIX. The compressor |
| places a header containing the size in bytes of the compressed |
| image stored as a GLsizei value at the location *data in host |
| memory. As in the DrawPixels case, the data pointer must obey |
| system requirements for the alignment of GLsizei values. The |
| byte stream of compressed image data is placed in host memory |
| starting immediately after the header. Up to |
| PACK_MAX_COMPRESSED_SIZE_SGIX bytes are written. If the value |
| of PACK_MAX_COMPRESSED_SIZE_SGIX is greater than zero and the |
| compressed size is greater than the value of |
| PACK_MAX_COMPRESSED_SIZE_SGIX, the error INVALID_OPERATION is |
| generated. If this occurs, the contents of the first |
| PACK_MAX_COMPRESSED_SIZE_SGIX bytes after the <data> pointer |
| are undefined, but bytes outside this range are guaranteed to |
| be left unchanged. |
| |
| The pixel pack parameters PACK_SWAP_BYTES, PACK_LSB_FIRST, |
| PACK_ROW_LENGTH, PACK_SKIP_ROWS, PACK_SKIP_PIXELS, and |
| PACK_ALIGNMENT are not considered when reading back compressed |
| images. |
| |
| Additions to Chapter 5 of the 1.1 Specification (Special Functions) |
| |
| None. |
| |
| Additions to Chapter 6 of the 1.1 Specification (State and State Requests) |
| |
| XXX |
| |
| Additions to the GLX Specification |
| |
| |
| Errors |
| |
| INVALID_VALUE is generated if the pname argument to |
| PixelStorei or PixelStoref is PACK_MAX_COMPRESSED_SIZE_SGIX |
| and the value of pname is less than zero. |
| |
| INVALID_OPERATION is generated if the compressed data |
| requested by a ReadPixels or GetTexImage will occupy more than |
| PACK_MAX_COMPRESSED_SIZE_SGIX bytes. |
| |
| INVALID_ENUM is generated if the type argument for a pixel |
| command specifies a slim type but the format argument |
| specifies color index, stencil index, or depth values. |
| |
| INVALID_ENUM is generated if the type argument for a pixel |
| command which deals with images of greater than two dimensions |
| specifies a slim type. |
| |
| New State |
| |
| Get Value Get Command Type Initial Value Attribute |
| --------- ----------- ---- ------------- --------- |
| PACK_MAX_COMPRESSED_SIZE_SGIX GetIntegerv Z+ 0 client |
| |
| New Implementation Dependent State |
| |
| None. |