1 Name 2 3 MESA_ycbcr_texture 4 5 Name Strings 6 7 GL_MESA_ycbcr_texture 8 9 Contact 10 11 Brian Paul, Tungsten Graphics, Inc. (brian.paul 'at' tungstengraphics.com) 12 Keith Whitwell, Tungsten Graphics, Inc. (keith 'at' tungstengraphics.com) 13 14 Status 15 16 Shipping (Mesa 4.0.4 and later) 17 18 Version 19 20 1.0 21 22 Number 23 24 TBD 25 26 Dependencies 27 28 OpenGL 1.0 or later is required 29 This extension is written against the OpenGL 1.4 Specification. 30 NV_texture_rectangle effects the definition of this extension. 31 32 Overview 33 34 This extension supports texture images stored in the YCbCr format. 35 There is no support for converting YCbCr images to RGB or vice versa 36 during pixel transfer. The texture's YCbCr colors are converted to 37 RGB during texture sampling, after-which, all the usual per-fragment 38 operations take place. Only 2D texture images are supported (not 39 glDrawPixels, glReadPixels, etc). 40 41 A YCbCr pixel (texel) is a 16-bit unsigned short with two components. 42 The first component is luminance (Y). For pixels in even-numbered 43 image columns, the second component is Cb. For pixels in odd-numbered 44 image columns, the second component is Cr. If one were to convert the 45 data to RGB one would need to examine two pixels from columns N and N+1 46 (where N is even) to deduce the RGB color. 47 48 IP Status 49 50 None 51 52 Issues 53 54 None 55 56 New Procedures and Functions 57 58 None 59 60 New Tokens 61 62 Accepted by the <internalFormat> and <format> parameters of 63 TexImage2D and TexSubImage2D: 64 65 YCBCR_MESA 0x8757 66 67 Accepted by the <type> parameter of TexImage2D and TexSubImage2D: 68 69 UNSIGNED_SHORT_8_8_MESA 0x85BA /* same as Apple's */ 70 UNSIGNED_SHORT_8_8_REV_MESA 0x85BB /* same as Apple's */ 71 72 Additions to Chapter 2 of the OpenGL 1.4 Specification (OpenGL Operation) 73 74 None 75 76 Additions to Chapter 3 of the OpenGL 1.4 Specification (Rasterization) 77 78 In section 3.6.4, Rasterization of Pixel Rectangles, on page 101, 79 add the following to Table 3.8 (Packed pixel formats): 80 81 type Parameter GL Data Number of Matching 82 Token Name Type Components Pixel Formats 83 -------------- ------- ---------- ------------- 84 UNSIGNED_SHORT_8_8_MESA ushort 2 YCBCR_MESA 85 UNSIGNED_SHORT_8_8_REV_MESA ushort 2 YCBCR_MESA 86 87 88 In section 3.6.4, Rasterization of Pixel Rectangles, on page 102, 89 add the following to Table 3.10 (UNSIGNED_SHORT formats): 90 91 UNSIGNED_SHORT_8_8_MESA: 92 93 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 94 +-------------------------------+-------------------------------+ 95 | 1st | 2nd | 96 +-------------------------------+-------------------------------+ 97 98 UNSIGNED_SHORT_8_8_REV_MESA: 99 100 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 101 +-------------------------------+-------------------------------+ 102 | 2nd | 1st | 103 +-------------------------------+-------------------------------+ 104 105 106 In section 3.6.4, Rasterization of Pixel Rectangles, on page 104, 107 add the following to Table 3.12 (Packed pixel field assignments): 108 109 First Second Third Fourth 110 Format Element Element Element Element 111 ------ ------- ------- ------- ------- 112 YCBCR_MESA luminance chroma 113 114 115 In section 3.8.1, Texture Image Specification, on page 125, add 116 another item to the list of TexImage2D and TexImage3D equivalence 117 exceptions: 118 119 * The value of internalformat and format may be YCBCR_MESA to 120 indicate that the image data is in YCbCr format. type must 121 be either UNSIGNED_SHORT_8_8_MESA or UNSIGNED_SHORT_8_8_REV_MESA 122 as seen in tables 3.8 and 3.10. Table 3.12 describes the mapping 123 between Y and Cb/Cr to the components. 124 If NV_texture_rectangle is supported target may also be 125 TEXTURE_RECTANGLE_NV or PROXY_TEXTURE_RECTANGLE_NV. 126 All pixel transfer operations are bypassed. The texture is stored as 127 YCbCr, not RGB. Queries of the texture's red, green and blue component 128 sizes will return zero. The YCbCr colors are converted to RGB during 129 texture sampling using an implementation dependent conversion. 130 131 132 In section 3.8.1, Texture Image Specification, on page 126, add 133 another item to the list of TexImage1D and TexImage2D equivalence 134 exceptions: 135 136 * The value of internalformat and format can not be YCBCR_MESA. 137 138 139 In section 3.8.2, Alternate Texture Image Specification Commands, on 140 page 129, insert this paragraph after the first full paragraph on the 141 page: 142 143 "If the internal storage format of the image being updated by 144 TexSubImage2D is YCBCR_MESA then format must be YCBCR_MESA. 145 The error INVALID_OPERATION will be generated otherwise." 146 147 148 Additions to Chapter 4 of the OpenGL 1.4 Specification (Per-Fragment 149 Operations and the Frame Buffer) 150 151 None 152 153 Additions to Chapter 5 of the OpenGL 1.4 Specification (Special Functions) 154 155 None 156 157 Additions to Chapter 6 of the OpenGL 1.4 Specification (State and 158 State Requests) 159 160 None 161 162 Additions to Appendix A of the OpenGL 1.4 Specification (Invariance) 163 164 None 165 166 Additions to the AGL/GLX/WGL Specifications 167 168 None 169 170 GLX Protocol 171 172 None 173 174 Errors 175 176 INVALID_ENUM is generated by TexImage2D if <internalFormat> is 177 MESA_YCBCR but <format> is not MESA_YCBCR. 178 179 INVALID_ENUM is generated by TexImage2D if <format> is MESA_YCBCR but 180 <internalFormat> is not MESA_YCBCR. 181 182 INVALID_VALUE is generated by TexImage2D if <format> is MESA_YCBCR and 183 <internalFormat> is MESA_YCBCR and <border> is not zero. 184 185 INVALID_OPERATION is generated by TexSubImage2D if the internal image 186 format is YCBCR_MESA and <format> is not YCBCR_MESA. 187 188 INVALID_OPERATION is generated by CopyTexSubImage2D if the internal 189 image is YCBCR_MESA. 190 191 New State 192 193 Edit table 6.16 on page 231: change the type of TEXTURE_INTERNAL_FORMAT 194 from n x Z42 to n x Z43 to indicate that internal format may also be 195 YCBCR_MESA. 196 197 Revision History 198 199 20 September 2002 - Initial draft 200 29 April 2003 - minor updates 201 3 September 2003 - further clarify when YCbCr->RGB conversion takes place 202 19 September 2003 - a few more updates prior to submitting to extension 203 registry. 204 3 April 2004 - fix assorted inaccuracies 205