Name OML_interlace Name Strings GL_OML_interlace Contact Jon Leech, Silicon Graphics (ljp 'at' sgi.com) Status Complete. Approved by the Khronos SIG on July 19, 2001. Version Last Modified Date: 07/23/2001 Author Revision: $Header: //depot/main/doc/registry/extensions/OML/interlace.spec#5 $ Number 239 Dependencies None. Overview This extension provides a way to interlace rows of pixels when drawing, reading, or copying pixel rectangles or texture images. In this context, interlacing means skiping over rows of pixels or texels in the destination. This is useful for dealing with video data since a single frame of video is typically composed from two images or fields: one image specifying the data for even rows of the frame and the other image specifying the data for odd rows of the frame. The functionality provided by this extension is a combination of the older SGIX_interlace and INGR_interlace_read extensions, with changes applying interlacing to texture image queries. Issues * Should there be a single enumerant controlling both draw and read operations? For the moment, we continue using separate enums, for backwards compatibility with SGIX_interlace and INGR_interlace_read. * Can we use the same enum values as the older extensions? Possibly, depending on the resolution of issues of exactly which operations interlacing is applied to. For the moment we assume the same values cannot be used. * Are there any GLX protocol issues relating to the actual vs. specified size of the image being transferred? Probably not, since unlike the effects of convolution, the image being transferred over the wire is always the specified size; all that changes is where the pixels are positioned in the frame buffer. * Discreet requested that INTERLACE_READ_OML apply to GetTexImage. The extension does not support this because there's no easy way to support it with any generality: with only the binary INTERLACE_READ_OML setting available, the implementation could return only the even rows, but would have no way of indicating that only the odd rows should be returned. This is non-orthogonal probably more frustrating than useful; a generic solution would require creation of a GetTexSubImage call. * We may need to be more precise about exactly which operations interlacing is and is not applied to. Currently it must be inferred from other parts of the OpenGL Specification, and different implementations are likely to disagree on this. Some language has been added to section 6.1.4 to deal explicitly with GetTexImage, but may be needed elsewhere as well. IP Status No known issues. New Procedures and Functions None. New Tokens Accepted by the parameter of Enable, Disable, and IsEnabled, and by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: INTERLACE_OML 0x8980 INTERLACE_READ_OML 0x8981 Additions to Chapter 2 of the OpenGL 1.2.1 Specification (OpenGL Operation) None. Additions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization) - (3.6.4, p. 99) Insert the following subsection between "Pixel Transfer Operations" and "Final Conversion" Interlacing This step applies only if INTERLACE_OML is enabled. All of the groups which belong to a row m in the source image are treated as if they belonged to the row 2 * m. If the source image has a height of h rows, this effectively expands the height of the image to 2 * h - 1 rows. After interlacing, only every other row of the image is defined. If the interlaced pixel rectangle is rasterized to the framebuffer, then only these rows are converted to fragments. If the interlaced pixel rectangle is a texture image, then only these rows are written to texure memory. In cases where errors can result from the specification of invalid image dimensions, it is the resulting dimensions that are tested, not the dimensions of the source image. (A specific example is TexImage2D, which specifies constraints for image dimensions. Even if TexImage2D is called with a null pixel pointer, the dimensions of the resulting texture image are those that would result from the effective expansion of the specified image due to interlacing.) Additions to Chapter 4 of the OpenGL 1.2.1 Specification (Per-Fragment Operations and the Frame Buffer) - (4.3.2, p. 157) Modify the 5th paragraph of "Obtaining Pixels from the Framebuffer" to read If INTERLACE_READ_OML is disabled, then ReadPixels obtains values from the selected buffer for each pixel with lower left hand corner at (x+i, y+j) for 0 <= i < width and 0 <= j < height; this pixel is said to be the ith pixel in the jth row. If INTERLACE_READ_OML is enabled, then ReadPixels obtains values from the selected buffer for each pixel with lower left hand corner at (x+i, y+(j*2)) for 0 <= i < width and 0 <= j < height; this pixel is said to be the ith pixel in the jth row. If any of these pixels lies outside of the window... Additions to Chapter 5 of the OpenGL 1.2.1 Specification (Special Functions) None. Additions to Chapter 6 of the OpenGL 1.2.1 Specification (State and State Requests) - (6.1.4, p. 184) Insert in the second paragraph, following "... and from the first image to the last for three-dimensional textures." The value of INTERLACE_READ_OML has no effect on the operation of GetTexImage. Additions to the GLX 1.3 Specification None. Errors See above. New State Get Value Type Get Command Initial Value Attribute --------- ---- ----------- ------------- --------- INTERLACE_OML B IsEnabled False pixel/enable INTERLACE_READ_OML B IsEnabled False pixel/enable New Implementation Dependent State None. Revision History * Revision 5, 07/24/2001 - Finalized Status for OpenML 1.0. * Revision 4, 07/11/2001 - Assign enum values and extension number for the registry. * Revision 3 - formatting changes for OpenML Specification * Revision 2 - expanded description of why GetTexImage doesn't support interlaced readbacks. * Revision 1 - derived from SGIX_interlace and INGR_interlace_read.