1Name 2 3 SGIX_pbuffer 4 5Name Strings 6 7 GLX_SGIX_pbuffer 8 9Version 10 11 Version 1.29, 2009/11/19 12 13Number 14 15 50 16 17Dependencies 18 19 SGIX_FBConfig is required 20 SGIS_multisample affects the definition of this extension 21 22Overview 23 24 This extension defines pixel buffers (GLXPbuffers, or pbuffer for 25 short). GLXPbuffers are additional non-visible rendering buffers for an 26 OpenGL renderer. GLXPbuffers are equivalent to GLXPixmaps with the 27 following exceptions: 28 29 1. There is no associated X pixmap. Also, since a GLXPbuffer is a GLX 30 resource, it may not be possible to render to it using X or an 31 X extension other than GLX. 32 33 2. The format of the color buffers and the type and size of any 34 associated ancillary buffers for a GLXPbuffer can only be 35 described with a GLXFBConfig -- an X Visual cannot be used. 36 37 3. It is possible to create a GLXPbuffer whose contents may be 38 asynchronously lost at any time. 39 40 4. GLXPbuffers can be rendered to using either direct or indirect 41 rendering contexts. 42 43 5. The allocation of a GLXPbuffer can fail if there are insufficient 44 resources (i.e., all the pbuffer memory has been allocated and 45 the implementation does not virtualize pbuffer memory.) 46 47 The intent of the pbuffer semantics is to enable implementations to 48 allocate pbuffers in non-visible frame buffer memory. These 49 pbuffers are intended to be "static" resources, in that a program 50 will typically allocate them only once, rather than as a part of its 51 rendering loop. (But they should be deallocated when the program is 52 no longer using them -- for example, if the program is iconified.) 53 The frame buffer resources that are associated with a pbuffer are 54 also static, and are deallocated only when the pbuffer is destroyed, 55 or, in the case of a "unpreserved" pbuffer, as a result of X server 56 activity that changes its frame buffer requirements. 57 58 59Issues 60 61 * Should the optimum width and height be fixed sizes or a multiple? 62 63 * Any better names for GLX_BUFFER_CLOBBER_MASK_SGIX, etc? 64 65 UM Should we add a command so an application can set the behavior 66 when a deep window buffer (e.g., depth buffer or multisample buffer) 67 is clobbered by a pbuffer? The choices would be "preserved" or 68 "unpreserved". 69 70 * When a pbuffer interferes with a window's ancillary buffer should 71 the action -- swapped or saved -- be specified or left as 72 implementation dependent? 73 74 75New Procedures and Functions 76 77 GLXPbuffer glXCreateGLXPbufferSGIX(Display *dpy, 78 GLXFBConfig config, 79 unsigned int width, 80 unsigned int height, 81 int *attrib_list); 82 83 void glXDestroyGLXPbufferSGIX(Display *dpy, 84 GLXPbuffer pbuf); 85 86 void glXQueryGLXPbufferSGIX(Display *dpy, 87 GLXPbuffer pbuf, 88 int attribute, 89 unsigned int *value); 90 91 void glXSelectEventSGIX(Display *dpy, 92 GLXDrawable drawable, 93 unsigned long mask); 94 95 void glXGetSelectedEventSGIX(Display *dpy, 96 GLXDrawable drawable, 97 unsigned long *mask); 98 99 100New Tokens 101 102 Accepted by the <attribute> parameter of glXGetFBConfigAttribSGIX: 103 104 GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 105 GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 106 GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 107 GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 108 GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A 109 110 Returned by glXGetFBConfigAttribSGIX (when <attribute> is set to 111 GLX_DRAWABLE_TYPE_SGIX) and accepted by the <attrib_list> parameter of 112 glXChooseFBConfigSGIX (following the GLX_DRAWABLE_TYPE_SGIX token): 113 114 GLX_PBUFFER_BIT_SGIX 0x00000004 115 116 Accepted by the <attrib_list> parameter of glXCreateGLXPbufferSGIX 117 and by the <attribute> parameter of glXQueryGLXPbufferSGIX: 118 119 GLX_PRESERVED_CONTENTS_SGIX 0x801B 120 GLX_LARGEST_PBUFFER_SGIX 0x801C 121 122 Accepted by the <attribute> parameter of glXQueryGLXPbufferSGIX: 123 124 GLX_WIDTH_SGIX 0x801D 125 GLX_HEIGHT_SGIX 0x801E 126 GLX_EVENT_MASK_SGIX 0x801F 127 128 Accepted by the <mask> parameter of glXSelectEventSGIX and returned 129 in the <mask> parameter of glXGetSelectedEventSGIX: 130 131 GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 132 133 Returned in the <event_type> field of a "buffer clobber" event: 134 135 GLX_DAMAGED_SGIX 0x8020 136 GLX_SAVED_SGIX 0x8021 137 138 Returned in the <draw_type> field of a "buffer clobber" event: 139 140 GLX_WINDOW_SGIX 0x8022 141 GLX_PBUFFER_SGIX 0x8023 142 143 Returned in the <mask> field of a "buffer clobber" event: 144 145 GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 146 GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 147 GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 148 GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 149 GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 150 GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 151 GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 152 GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 153 GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 154 155Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) 156 157 None 158 159Additions to Chapter 3 of the 1.0 Specification (Rasterization) 160 161 None 162 163Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations 164and the Frame buffer) 165 166 None 167 168Additions to Chapter 5 of the 1.0 Specification (Special Functions) 169 170 None 171 172Additions to Chapter 6 of the 1.0 Specification (State and State Requests) 173 174 None 175 176Additions to the GLX Specification 177 178 [Add the following to section 3.2.2 on Configuration Management] 179 180 [Add to glXGetFBConfigAttribSGIX]: 181 182 GLX_MAX_PBUFFER_WIDTH_SGIX and GLX_MAX_PBUFFER_HEIGHT_SGIX indicate the 183 maximum width and height that can be passed into glXCreateGLXPbufferSGIX and 184 GLX_MAX_PBUFFER_PIXELS_SGIX indicates the maximum number of pixels (width x 185 hieght) for a GLXPbuffer. Note that an implementation may return a value for 186 GLX_MAX_PBUFFER_PIXELS_SGIX that is less than the maximum width times the 187 maximum height. Also, the value for GLX_MAX_PBUFFER_PIXELS_SGIX is static 188 and assumes that no other pbuffers or X resources are contending for the 189 framebuffer memory. Thus it may not be possible to allocate a pbuffer of 190 the size given by GLX_MAX_PBUFFER_PIXELS_SGIX. 191 192 On some implementations, there may be an optimum width and height to use 193 when allocating a pbuffer. (For example, the implementation may use fixed 194 size tiles to allocate pbuffers.) Use GLX_OPTIMAL_PBUFFER_WIDTH_SGIX and 195 GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX to determine this width and height. If the 196 values are zero then there is no optimal value. 197 198 [Add to glXChooseFBConfigSGIX]: 199 200 If GLX_OPTIMAL_PBUFFER_WIDTH_SGIX and/or GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 201 are specified in <attrib_list> then they are ignored. 202 203 [Additions to tables 2 and 3, given in SGIX_FBConfig] 204 205 Attribute Type Description 206 --------- ---- ----------- 207 GLX_BUFFER_SIZE integer depth of the color buffer 208 GLX_LEVEL integer frame buffer level 209 GLX_DOUBLEBUFFER boolean True if color buffers have 210 front/back pairs 211 GLX_STEREO boolean True if color buffers have 212 left/right pairs 213 GLX_AUX_BUFFERS integer number of auxiliary color 214 buffers 215 GLX_RED_SIZE integer number of bits of Red if in 216 RGB mode 217 GLX_GREEN_SIZE integer number of bits of Green if in 218 RGB mode 219 GLX_BLUE_SIZE integer number of bits of Blue if in 220 RGB mode 221 GLX_ALPHA_SIZE integer number of bits of Alpha if in 222 RGB mode 223 GLX_DEPTH_SIZE integer number of bits in the depth 224 buffer 225 GLX_STENCIL_SIZE integer number of bits in the stencil 226 buffer 227 GLX_ACCUM_RED_SIZE integer number of bits of Red in the 228 accumulation buffer 229 GLX_ACCUM_GREEN_SIZE integer number of bits of Green in the 230 accumulation buffer 231 GLX_ACCUM_BLUE_SIZE integer number of bits of Blue in the 232 accumulation buffer 233 GLX_ACCUM_ALPHA_SIZE integer number of bits of Alpha in the 234 accumulation buffer 235 GLX_SAMPLE_BUFFERS_SGIS integer number of multisample buffers 236 GLX_SAMPLES_SGIS integer number of samples stored in 237 each multisample buffer 238 GLX_X_VISUAL_TYPE_EXT integer X visual type of the 239 associated visual 240 GLX_TRANSPARENT_TYPE_EXT enum GLX_NONE_EXT, 241 TRANSPARENT_RGB_EXT, or 242 TRANSPARENT_INDEX_EXT 243 GLX_TRANSPARENT_INDEX_VALUE_EXT integer transparent index value. 244 GLX_TRANSPARENT_RED_VALUE_EXT color transparent color value. 245 GLX_TRANSPARENT_GREEN_VALUE_EXT color transparent color value. 246 GLX_TRANSPARENT_BLUE_VALUE_EXT color transparent color value. 247 GLX_TRANSPARENT_ALPHA_VALUE_EXT color transparent color value. 248 GLX_VISUAL_CAVEAT_EXT enum GLX_NONE_EXT or 249 GLX_SLOW_VISUAL_EXT 250 GLX_DRAWABLE_TYPE_SGIX bitmask mask indicating which GLX 251 drawables are supported. Valid 252 bits are GLX_WINDOW_BIT_SGIX and 253 GLX_PIXMAP_BIT_SGIX 254 GLX_RENDER_TYPE_SGIX bitmask mask indicating which OpenGL 255 rendering modes are supported. 256 Valid bits are GLX_RGBA_BIT_SGIX 257 and GLX_COLOR_INDEX_SGIX. 258 GLX_X_RENDERABLE_SGIX boolean True if X can render to drawable 259 GLX_MAX_PBUFFER_WIDTH_SGIX integer maximum width of GLXPbuffer 260 GLX_MAX_PBUFFER_HEIGHT_SGIX integer maximum height of GLXPbuffer 261 GLX_MAX_PBUFFER_PIXELS_SGIX integer maximum size of GLXPbuffer 262 GLX_OPTIMAL_PBUFFER_WIDTH_SGIX integer best width to use when 263 creating pbuffer, or zero if 264 all widths are equally good. 265 GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX integer best height to use when creating 266 pbuffer, or zero if all 267 heights are equally good. 268 269 Table 3: GLX configuration attributes for GLXFBConfigs (Note that 270 GLX_RGBA and GLX_USE_GL are not supported) 271 272 Attribute Default Match Criteria 273 --------- ------- -------------- 274 GLX_BUFFER_SIZE 0 minimum 275 GLX_LEVEL 0 exact 276 GLX_DOUBLEBUFFER don't care exact 277 GLX_STEREO False exact 278 GLX_AUX_BUFFERS 0 minimum 279 GLX_RED_SIZE 0 minimum 280 GLX_GREEN_SIZE 0 minimum 281 GLX_BLUE_SIZE 0 minimum 282 GLX_ALPHA_SIZE 0 minimum 283 GLX_DEPTH_SIZE 0 minimum 284 GLX_STENCIL_SIZE 0 minimum 285 GLX_ACCUM_RED_SIZE 0 minimum 286 GLX_ACCUM_GREEN_SIZE 0 minimum 287 GLX_ACCUM_BLUE_SIZE 0 minimum 288 GLX_ACCUM_ALPHA_SIZE 0 minimum 289 GLX_SAMPLE_BUFFERS_SGIS 0 minimum 290 GLX_SAMPLES_SGIS 0 minimum 291 GLX_X_VISUAL_TYPE_EXT don't care exact 292 GLX_TRANSPARENT_PIXEL_EXT GLX_NONE_EXT exact 293 GLX_TRANSPARENT_INDEX_VALUE_EXT don't care exact 294 GLX_TRANSPARENT_RED_VALUE_EXT don't care exact 295 GLX_TRANSPARENT_GREEN_VALUE_EXT don't care exact 296 GLX_TRANSPARENT_BLUE_VALUE_EXT don't care exact 297 GLX_TRANSPARENT_ALPHA_VALUE_EXT don't care exact 298 GLX_VISUAL_CAVEAT_EXT don't care exact 299 GLX_DRAWABLE_TYPE_SGIX GLX_WINDOW_BIT_SGIX minimum 300 GLX_RENDER_TYPE_SGIX GLX_RGBA_BIT_SGIX minimum 301 GLX_X_RENDERABLE_SGIX don't care exact 302 GLX_FBCONFIG_ID_SGIX don't care exact 303 GLX_MAX_PBUFFER_WIDTH_SGIX 0 minimum 304 GLX_MAX_PBUFFER_HEIGHT_SGIX 0 minimum 305 GLX_MAX_PBUFFER_PIXELS_SGIX 0 minimum 306 GLX_OPTIMAL_PBUFFER_WIDTH_SGIX ignored ignored 307 GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX ignored ignored 308 309 Table 4: Default values and match criteria for GLX configuration 310 attributes for GLXFBConfigs 311 312 313 [Add the following to section 3.2.3 on Offscreen Rendering] 314 315 To create a GLXPbuffer call: 316 317 GLXPbuffer glXCreateGLXPbufferSGIX(Display *dpy, 318 GLXFBConfig config, 319 unsigned int width, 320 unsigned int height, 321 int *attrib_list); 322 323 This creates a single GLXPbuffer and returns its XID. <width> and <height> 324 specify the pixel width and height of the rectangular pbuffer and 325 <attrib_list> specifies a list of attributes for the pbuffer. Currently 326 only two attributes can be specified in <attrib_list>: 327 GLX_PRESERVED_CONTENTS_SGIX and GLX_LARGEST_PBUFFER_SGIX. 328 329 <attrib_list> can be either NULL, in which case all the attributes assume 330 their default values as described below. If it not NULL then its format is 331 similar to the attribute list paramter of glXChooseFBConfigSGIX: each 332 attribute is immediately followed by the corresponding desired value and the 333 list is terminated with None. 334 335 Use GLX_LARGEST_PBUFFER_SGIX to get the largest available pbuffer when 336 the allocation of the pbuffer would otherwise fail. The width or height 337 of the allocated pbuffer never exceed <width> and <height>, 338 respectively. Use glXQueryGLXPbufferSGIX to retrieve the dimensions of the 339 allocated pbuffer. By default, GLX_LARGEST_PBUFFER_SGIX is False. 340 341 If the GLX_PRESERVED_CONTENTS_SGIX attribute is set to False in 342 <attrib_list>, then an "unpreserved" pbuffer is created and the contents 343 of the pbuffer may be lost at any time. If this attribute is not 344 specified, or if it is specified as True in <attrib_list>, then when a 345 resource conflict occurs the contents of the pbuffer will be preserved 346 (most likely by swapping out portions of the buffer to main memory). In 347 either case, the client can register to receive a "buffer clobber" event 348 which is generated when the pbuffer contents have been preserved or have 349 been damaged. (See the event description.) 350 351 The resulting pbuffer will contain color buffers and ancillary as 352 specified by <config>. Note that pbuffers use framebuffer 353 resources so applications should consider deallocating them when 354 they are not in use. 355 356 It is possible to create a pbuffer with back buffers and to swap 357 the front and back buffers by calling glXSwapBuffers. The contents 358 of the back buffers are undefined after such a swap. (Pbuffers are 359 the same as windows in this respect.) 360 361 Any GLX rendering context created with a GLXFBConfig or X Visual that is 362 "compatible" with the <config> may be used to render into the pbuffer. (See 363 description of glXCreateContextWithConfigSGIX, glXMakeCurrent and 364 glXMakeCurrentReadSGI for definition of "compatible".) If a pbuffer is 365 created with GLX_PRESERVED_CONTENTS_SGIX set to False, then portion of the 366 buffer contents may be lost at any time due to frame buffer resource 367 conflicts. Once the contents of a "non preserved" pbuffer has been lost it 368 is considered to be in a "damaged" state. It is not an error to render to a 369 pbuffer that is in this state but the effect of rendering to it is 370 undefined. It is also not an error to query the pixel contents of such a 371 pbuffer, but the values of the returned pixels are undefined. Note, that 372 while this specification allows for non preserved pbuffers to be damaged as 373 a result of other pbuffer activity, the intent is to only have visible 374 windows activity "damage" pbuffers. 375 376 Since the contents of a "unpreserved" pbuffer can be lost at anytime 377 with only asynchronous notification (via the "buffer clobber" event), the 378 only way a client can guarantee that valid pixels are read back with 379 glReadPixels is by grabbing the X server. (Note that this operation is 380 potentially expensive and should not be done frequently. Also, since this 381 locks out other X clients, it should only be done for short periods of 382 time.) Clients that don't wish to do this can check if the data returned 383 by glReadPixels is valid by calling XSync and then checking the event 384 queue for "buffer clobber" events (assuming that these events had been 385 pulled off of the queue prior to the glReadPixels call). 386 387 When glXCreateGLXPbufferSGIX fails to create a GLXPbuffer due to 388 insufficient resources, a BadAlloc error is generated and None is 389 returned. If <config> is not a valid GLXFBConfig then a GLXBadFBConfigSGIX 390 error is generated; if <config> does not support GLXPbuffers then a BadMatch 391 error is generated. 392 393 A GLXPbuffer is destroyed by calling: 394 395 void glXDestroyGLXPbufferSGIX(Display *dpy, 396 GLXPbuffer pbuf); 397 398 The GLXPbuffer will be destroyed once it is no longer current to any 399 client. When a GLXPbuffer is destroyed, any memory resources that are 400 attached to it are freed, and its XID is made available for reuse. 401 402 If <pbuf> is not a valid GLXPbuffer then a GLXBadPbufferSGIX error 403 is generated. 404 405 To query an attribute associated with a GLXPbuffer call 406 407 void glXQueryGLXPbufferSGIX(Display* dpy, 408 GLXPbuffer pbuf, 409 int attribute, 410 unsigned int *value); 411 412 <attribute> must be set to one of GLX_WIDTH_SGIX, GLX_HEIGHT_SGIX, 413 GLX_PRESERVED_CONTENTS_SGIX, GLX_LARGEST_PBUFFER_SGIX, or 414 GLX_FBCONFIG_ID_SGIX. 415 416 To get the GLXFBConfig for a GLXPbuffer, first retrieve the i.d. for the 417 FBConfig and then call glXChooseFBConfigSGIX. 418 419 If <pbuf> is not a valid GLXPbuffer then a GLXBadPbufferSGIX error is 420 generated. 421 422 423 [Add new section, Events] 424 425 A client can ask to receive GLX events on a window or GLXPbuffer. 426 427 void glXSelectEventSGIX(Display *dpy, 428 GLXDrawable drawable, 429 unsigned long mask); 430 431 Currently only one GLX event, GLX_BUFFER_CLOBBER_MASK_SGIX, can be selected: 432 433 typdef struct { 434 int event_type; /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */ 435 int draw_type; /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */ 436 unsigned long serial; /* # of last request processed by server */ 437 Bool send_event; /* event was generated by a SendEvent request */ 438 Display *display; /* display the event was read from */ 439 GLXDrawable drawable; /* i.d. of Drawable */ 440 unsigned int mask; /* mask indicating which buffers are affected*/ 441 int x, y; 442 int width, height; 443 int count; /* if nonzero, at least this many more */ 444 } GLXBufferClobberEventSGIX; 445 446 A single X server operation can cause several "buffer clobber" events to be 447 sent. (e.g., a single pbuffer may be damaged and cause multiple "buffer 448 clobber" events to be generated). Each event specifies one region of the 449 GLXDrawable that was affected by the X Server operation. <mask> indicates 450 which color or ancillary buffers were affected. All the "buffer clobber" 451 events generated by a single X server action are guaranteed to be contiguous 452 in the event queue. The conditions under which this event is generated and 453 the event <type> varies, depending on the type of the GLXDrawable. 454 455 For "preserved" pbuffers, a "buffer clobber" event, with <type> 456 GLX_SAVED_SGIX, is generated whenever the contents of a pbuffer has to be 457 moved to avoid being damaged. The event(s) describes which portions of the 458 pbuffer were affected. Clients who receive many "buffer clobber" events, 459 referring to different save actions, should consider freeing the pbuffer 460 resource in order to prevent the system from thrashing due to insufficient 461 resources. 462 463 For an "unpreserved" pbuffer a "buffer clobber" event, with <type> 464 GLX_DAMAGED_SGIX, is generated whenever a portion of the pbuffer becomes 465 invalid. 466 467 For Windows, "buffer clobber" events, with <type> GLX_DAMAGED_SGIX or 468 GLX_SAVED_SGIX, occur whenever an ancillary buffer, associated with the 469 window, gets clobbered or moved out of offscreen memory. The event contains 470 information indicating which color or ancillary buffers, and which 471 portions of those buffers, were affected. 472 473 Calling glXSelectEventSGIX overrides any previous event mask that was set by 474 the client for <drawable>. Note that a separate event mask is maintained for 475 each client that requested "clobber events" for <drawable>. 476 477 If <drawable> is not a valid GLXPbuffer or a valid Window, a GLXBadDrawable 478 error is generated. 479 480 To find out which GLX events are selected for a window or GLXPbuffer call 481 482 void glXGetSelectedEventSGIX(Display *dpy, 483 GLXDrawable drawable, 484 unsigned long *mask); 485 486 487GLX Protocol 488 489 Four new GLX protocol commands are added. 490 491 CreateGLXPbufferSGIX 492 1 CARD8 opcode (X assigned) 493 1 17 GLX opcode (glXVendorPrivateWithReply) 494 2 8 + 2n request length 495 4 65543 vendor specific opcode 496 4 unused 497 4 CARD32 screen 498 4 GLX_FBCONFIG fbconfig 499 4 GLX_PBUFFER pbuffer 500 4 CARD32 width 501 4 CARD32 height 502 8 * n LISTofATTRIB properties 503 504 Where n is the number of token/value pairs. Each token value is 505 either a CARD32, BOOL32, or INT32, followed by an attribute 506 value which is also either a CARD32, BOOL32, or INT32. 507 508 509 DestroyGLXPbufferSGIX 510 1 CARD8 opcode (X assigned) 511 1 17 GLX opcode (glXVendorPrivateWithReply) 512 2 4 request length 513 4 65544 vendor specific opcode 514 4 unused 515 4 GLX_PBUFFER pbuffer 516 517 518 ChangeDrawableAttributesSGIX 519 1 CARD8 opcode (X assigned) 520 1 17 GLX opcode (glXVendorPrivateWithReply) 521 2 4 + 2*n request length 522 4 65545 vendor specific opcode 523 4 unused 524 4 GLX_DRAWABLE drawable 525 8 * n LISTofATTRIB properties 526 527 Where n is the number of token/value pairs. Each token value is 528 either a CARD32, BOOL32, or INT32, followed by an attribute 529 value which is also either a CARD32, BOOL32, or INT32. 530 531 532 GetDrawableAttributesSGIX 533 1 CARD8 opcode (X assigned) 534 1 17 GLX opcode (glXVendorPrivateWithReply) 535 2 4 + 2n request length 536 4 65546 vendor specific opcode 537 4 unused 538 4 GLX_DRAWABLE drawable 539 => 540 1 1 reply 541 1 unused 542 2 CARD16 sequence number 543 4 2*n length 544 4 CARD32 numAttribs 545 20 unused 546 8 * n LISTofATTRIB properties 547 548 Where n is the number of token/value pairs. Each token value is 549 either a CARD32, BOOL32, or INT32, followed by an attribute 550 value which is also either a CARD32, BOOL32, or INT32. 551 552 One new event is added: 553 554 BEC is the base event code for the extension, as returned by 555 XQueryExtension. 556 557 GLX_BUFFER_CLOBBER_MASK_SGIX 558 1 BEC+16 code 559 1 unused 560 2 CARD16 sequence number 561 2 CARD16 event_type 562 0x8017 GLX_DAMAGED_SGIX 563 0x8018 GLX_SAVED_SGIX 564 2 CARD16 draw_type 565 0x8019 GLX_WINDOW_SGIX 566 0x801A GLX_PBUFFER_SGIX 567 4 GLX_DRAWABLE drawable 568 4 BITFIELD mask 569 2 CARD16 x 570 2 CARD16 y 571 2 CARD16 width 572 2 CARD16 height 573 2 CARD16 count 574 6 unused 575 576Dependencies on SGIS_multisample 577 578 If SGIS_multisample is not supported, references to 579 GLX_SAMPLE_BUFFERS_BIT_SGIX in this document are invalid and should be 580 ignored. 581 582Errors 583 584 One new GLX errors is introduced: 585 586 GLXBadPbufferSGIX 587 588New State 589 590 None 591 592New Implementation Dependent State 593 594 None 595 596Revision History 597 598 Version 1.29, 2009/11/19 - clarify that BEC in the 599 GLX_BUFFER_CLOBBER_MASK_SGIX event protocol is returned from 600 XQueryExtension, matching the GLX_ARB_create_context spec language. 601 602 Version 1.28, 1997/03/20 - final spec as shipped by SGI. 603