1Name 2 3 OML_interlace 4 5Name Strings 6 7 GL_OML_interlace 8 9Contact 10 11 Jon Leech, Silicon Graphics (ljp 'at' sgi.com) 12 13Status 14 15 Complete. Approved by the Khronos SIG on July 19, 2001. 16 17Version 18 19 Last Modified Date: 07/23/2001 20 Author Revision: $Header: //depot/main/doc/registry/extensions/OML/interlace.spec#5 $ 21 22Number 23 24 239 25 26Dependencies 27 28 None. 29 30Overview 31 32 This extension provides a way to interlace rows of pixels when 33 drawing, reading, or copying pixel rectangles or texture images. In 34 this context, interlacing means skiping over rows of pixels or 35 texels in the destination. This is useful for dealing with video 36 data since a single frame of video is typically composed from two 37 images or fields: one image specifying the data for even rows of the 38 frame and the other image specifying the data for odd rows of the 39 frame. 40 41 The functionality provided by this extension is a combination 42 of the older SGIX_interlace and INGR_interlace_read extensions, 43 with changes applying interlacing to texture image queries. 44 45Issues 46 47 * Should there be a single enumerant controlling both draw and read 48 operations? For the moment, we continue using separate enums, for 49 backwards compatibility with SGIX_interlace and INGR_interlace_read. 50 51 * Can we use the same enum values as the older extensions? Possibly, 52 depending on the resolution of issues of exactly which operations 53 interlacing is applied to. For the moment we assume the same 54 values cannot be used. 55 56 * Are there any GLX protocol issues relating to the actual vs. 57 specified size of the image being transferred? Probably not, since 58 unlike the effects of convolution, the image being transferred over 59 the wire is always the specified size; all that changes is where the 60 pixels are positioned in the frame buffer. 61 62 * Discreet requested that INTERLACE_READ_OML apply to GetTexImage. The 63 extension does not support this because there's no easy way to 64 support it with any generality: with only the binary 65 INTERLACE_READ_OML setting available, the implementation could 66 return only the even rows, but would have no way of indicating that 67 only the odd rows should be returned. This is non-orthogonal 68 probably more frustrating than useful; a generic solution would 69 require creation of a GetTexSubImage call. 70 71 * We may need to be more precise about exactly which operations 72 interlacing is and is not applied to. Currently it must be inferred 73 from other parts of the OpenGL Specification, and different 74 implementations are likely to disagree on this. Some language has 75 been added to section 6.1.4 to deal explicitly with GetTexImage, but 76 may be needed elsewhere as well. 77 78IP Status 79 80 No known issues. 81 82New Procedures and Functions 83 84 None. 85 86New Tokens 87 88 Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, 89 and by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, 90 and GetDoublev: 91 92 INTERLACE_OML 0x8980 93 INTERLACE_READ_OML 0x8981 94 95Additions to Chapter 2 of the OpenGL 1.2.1 Specification (OpenGL Operation) 96 97 None. 98 99Additions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization) 100 101 - (3.6.4, p. 99) Insert the following subsection between "Pixel 102 Transfer Operations" and "Final Conversion" 103 104 Interlacing 105 106 This step applies only if INTERLACE_OML is enabled. All of the 107 groups which belong to a row m in the source image are treated as if 108 they belonged to the row 2 * m. If the source image has a height of 109 h rows, this effectively expands the height of the image to 2 * h - 110 1 rows. After interlacing, only every other row of the image is 111 defined. If the interlaced pixel rectangle is rasterized to the 112 framebuffer, then only these rows are converted to fragments. If the 113 interlaced pixel rectangle is a texture image, then only these rows 114 are written to texure memory. 115 116 In cases where errors can result from the specification of invalid 117 image dimensions, it is the resulting dimensions that are tested, 118 not the dimensions of the source image. (A specific example is 119 TexImage2D, which specifies constraints for image dimensions. Even 120 if TexImage2D is called with a null pixel pointer, the dimensions of 121 the resulting texture image are those that would result from the 122 effective expansion of the specified image due to interlacing.) 123 124Additions to Chapter 4 of the OpenGL 1.2.1 Specification (Per-Fragment 125Operations and the Frame Buffer) 126 127 - (4.3.2, p. 157) Modify the 5th paragraph of "Obtaining Pixels from 128 the Framebuffer" to read 129 130 If INTERLACE_READ_OML is disabled, then ReadPixels obtains values 131 from the selected buffer for each pixel with lower left hand corner 132 at (x+i, y+j) for 0 <= i < width and 0 <= j < height; this pixel is 133 said to be the ith pixel in the jth row. 134 135 If INTERLACE_READ_OML is enabled, then ReadPixels obtains values 136 from the selected buffer for each pixel with lower left hand corner 137 at (x+i, y+(j*2)) for 0 <= i < width and 0 <= j < height; this pixel 138 is said to be the ith pixel in the jth row. 139 140 If any of these pixels lies outside of the window... 141 142 143Additions to Chapter 5 of the OpenGL 1.2.1 Specification (Special Functions) 144 145 None. 146 147Additions to Chapter 6 of the OpenGL 1.2.1 Specification (State and State Requests) 148 149 - (6.1.4, p. 184) Insert in the second paragraph, following "... and 150 from the first image to the last for three-dimensional textures." 151 152 The value of INTERLACE_READ_OML has no effect on the operation of 153 GetTexImage. 154 155Additions to the GLX 1.3 Specification 156 157 None. 158 159Errors 160 161 See above. 162 163New State 164 165 Get Value Type Get Command Initial Value Attribute 166 --------- ---- ----------- ------------- --------- 167 INTERLACE_OML B IsEnabled False pixel/enable 168 INTERLACE_READ_OML B IsEnabled False pixel/enable 169 170New Implementation Dependent State 171 172 None. 173 174Revision History 175 176 * Revision 5, 07/24/2001 - Finalized Status for OpenML 1.0. 177 * Revision 4, 07/11/2001 - Assign enum values and extension number 178 for the registry. 179 * Revision 3 - formatting changes for OpenML Specification 180 * Revision 2 - expanded description of why GetTexImage doesn't support 181 interlaced readbacks. 182 * Revision 1 - derived from SGIX_interlace and INGR_interlace_read. 183