github.com/BurntSushi/xgb@v0.0.0-20210121224620-deaf085860bc/glx/glx.go (about) 1 // Package glx is the X client API for the GLX extension. 2 package glx 3 4 // This file is automatically generated from glx.xml. Edit at your peril! 5 6 import ( 7 "github.com/BurntSushi/xgb" 8 9 "github.com/BurntSushi/xgb/xproto" 10 ) 11 12 // Init must be called before using the GLX extension. 13 func Init(c *xgb.Conn) error { 14 reply, err := xproto.QueryExtension(c, 3, "GLX").Reply() 15 switch { 16 case err != nil: 17 return err 18 case !reply.Present: 19 return xgb.Errorf("No extension named GLX could be found on on the server.") 20 } 21 22 c.ExtLock.Lock() 23 c.Extensions["GLX"] = reply.MajorOpcode 24 c.ExtLock.Unlock() 25 for evNum, fun := range xgb.NewExtEventFuncs["GLX"] { 26 xgb.NewEventFuncs[int(reply.FirstEvent)+evNum] = fun 27 } 28 for errNum, fun := range xgb.NewExtErrorFuncs["GLX"] { 29 xgb.NewErrorFuncs[int(reply.FirstError)+errNum] = fun 30 } 31 return nil 32 } 33 34 func init() { 35 xgb.NewExtEventFuncs["GLX"] = make(map[int]xgb.NewEventFun) 36 xgb.NewExtErrorFuncs["GLX"] = make(map[int]xgb.NewErrorFun) 37 } 38 39 // BadBadContext is the error number for a BadBadContext. 40 const BadBadContext = 0 41 42 type BadContextError GenericError 43 44 // BadContextErrorNew constructs a BadContextError value that implements xgb.Error from a byte slice. 45 func BadContextErrorNew(buf []byte) xgb.Error { 46 v := BadContextError(GenericErrorNew(buf).(GenericError)) 47 v.NiceName = "BadContext" 48 return v 49 } 50 51 // SequenceId returns the sequence id attached to the BadBadContext error. 52 // This is mostly used internally. 53 func (err BadContextError) SequenceId() uint16 { 54 return err.Sequence 55 } 56 57 // BadId returns the 'BadValue' number if one exists for the BadBadContext error. If no bad value exists, 0 is returned. 58 func (err BadContextError) BadId() uint32 { 59 return 0 60 } 61 62 // Error returns a rudimentary string representation of the BadBadContext error. 63 func (err BadContextError) Error() string { 64 fieldVals := make([]string, 0, 4) 65 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 66 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 67 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 68 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 69 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 70 return "BadBadContext {" + xgb.StringsJoin(fieldVals, ", ") + "}" 71 } 72 73 func init() { 74 xgb.NewExtErrorFuncs["GLX"][0] = BadContextErrorNew 75 } 76 77 // BadBadContextState is the error number for a BadBadContextState. 78 const BadBadContextState = 1 79 80 type BadContextStateError GenericError 81 82 // BadContextStateErrorNew constructs a BadContextStateError value that implements xgb.Error from a byte slice. 83 func BadContextStateErrorNew(buf []byte) xgb.Error { 84 v := BadContextStateError(GenericErrorNew(buf).(GenericError)) 85 v.NiceName = "BadContextState" 86 return v 87 } 88 89 // SequenceId returns the sequence id attached to the BadBadContextState error. 90 // This is mostly used internally. 91 func (err BadContextStateError) SequenceId() uint16 { 92 return err.Sequence 93 } 94 95 // BadId returns the 'BadValue' number if one exists for the BadBadContextState error. If no bad value exists, 0 is returned. 96 func (err BadContextStateError) BadId() uint32 { 97 return 0 98 } 99 100 // Error returns a rudimentary string representation of the BadBadContextState error. 101 func (err BadContextStateError) Error() string { 102 fieldVals := make([]string, 0, 4) 103 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 104 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 105 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 106 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 107 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 108 return "BadBadContextState {" + xgb.StringsJoin(fieldVals, ", ") + "}" 109 } 110 111 func init() { 112 xgb.NewExtErrorFuncs["GLX"][1] = BadContextStateErrorNew 113 } 114 115 // BadBadContextTag is the error number for a BadBadContextTag. 116 const BadBadContextTag = 4 117 118 type BadContextTagError GenericError 119 120 // BadContextTagErrorNew constructs a BadContextTagError value that implements xgb.Error from a byte slice. 121 func BadContextTagErrorNew(buf []byte) xgb.Error { 122 v := BadContextTagError(GenericErrorNew(buf).(GenericError)) 123 v.NiceName = "BadContextTag" 124 return v 125 } 126 127 // SequenceId returns the sequence id attached to the BadBadContextTag error. 128 // This is mostly used internally. 129 func (err BadContextTagError) SequenceId() uint16 { 130 return err.Sequence 131 } 132 133 // BadId returns the 'BadValue' number if one exists for the BadBadContextTag error. If no bad value exists, 0 is returned. 134 func (err BadContextTagError) BadId() uint32 { 135 return 0 136 } 137 138 // Error returns a rudimentary string representation of the BadBadContextTag error. 139 func (err BadContextTagError) Error() string { 140 fieldVals := make([]string, 0, 4) 141 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 142 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 143 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 144 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 145 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 146 return "BadBadContextTag {" + xgb.StringsJoin(fieldVals, ", ") + "}" 147 } 148 149 func init() { 150 xgb.NewExtErrorFuncs["GLX"][4] = BadContextTagErrorNew 151 } 152 153 // BadBadCurrentDrawable is the error number for a BadBadCurrentDrawable. 154 const BadBadCurrentDrawable = 11 155 156 type BadCurrentDrawableError GenericError 157 158 // BadCurrentDrawableErrorNew constructs a BadCurrentDrawableError value that implements xgb.Error from a byte slice. 159 func BadCurrentDrawableErrorNew(buf []byte) xgb.Error { 160 v := BadCurrentDrawableError(GenericErrorNew(buf).(GenericError)) 161 v.NiceName = "BadCurrentDrawable" 162 return v 163 } 164 165 // SequenceId returns the sequence id attached to the BadBadCurrentDrawable error. 166 // This is mostly used internally. 167 func (err BadCurrentDrawableError) SequenceId() uint16 { 168 return err.Sequence 169 } 170 171 // BadId returns the 'BadValue' number if one exists for the BadBadCurrentDrawable error. If no bad value exists, 0 is returned. 172 func (err BadCurrentDrawableError) BadId() uint32 { 173 return 0 174 } 175 176 // Error returns a rudimentary string representation of the BadBadCurrentDrawable error. 177 func (err BadCurrentDrawableError) Error() string { 178 fieldVals := make([]string, 0, 4) 179 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 180 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 181 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 182 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 183 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 184 return "BadBadCurrentDrawable {" + xgb.StringsJoin(fieldVals, ", ") + "}" 185 } 186 187 func init() { 188 xgb.NewExtErrorFuncs["GLX"][11] = BadCurrentDrawableErrorNew 189 } 190 191 // BadBadCurrentWindow is the error number for a BadBadCurrentWindow. 192 const BadBadCurrentWindow = 5 193 194 type BadCurrentWindowError GenericError 195 196 // BadCurrentWindowErrorNew constructs a BadCurrentWindowError value that implements xgb.Error from a byte slice. 197 func BadCurrentWindowErrorNew(buf []byte) xgb.Error { 198 v := BadCurrentWindowError(GenericErrorNew(buf).(GenericError)) 199 v.NiceName = "BadCurrentWindow" 200 return v 201 } 202 203 // SequenceId returns the sequence id attached to the BadBadCurrentWindow error. 204 // This is mostly used internally. 205 func (err BadCurrentWindowError) SequenceId() uint16 { 206 return err.Sequence 207 } 208 209 // BadId returns the 'BadValue' number if one exists for the BadBadCurrentWindow error. If no bad value exists, 0 is returned. 210 func (err BadCurrentWindowError) BadId() uint32 { 211 return 0 212 } 213 214 // Error returns a rudimentary string representation of the BadBadCurrentWindow error. 215 func (err BadCurrentWindowError) Error() string { 216 fieldVals := make([]string, 0, 4) 217 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 218 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 219 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 220 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 221 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 222 return "BadBadCurrentWindow {" + xgb.StringsJoin(fieldVals, ", ") + "}" 223 } 224 225 func init() { 226 xgb.NewExtErrorFuncs["GLX"][5] = BadCurrentWindowErrorNew 227 } 228 229 // BadBadDrawable is the error number for a BadBadDrawable. 230 const BadBadDrawable = 2 231 232 type BadDrawableError GenericError 233 234 // BadDrawableErrorNew constructs a BadDrawableError value that implements xgb.Error from a byte slice. 235 func BadDrawableErrorNew(buf []byte) xgb.Error { 236 v := BadDrawableError(GenericErrorNew(buf).(GenericError)) 237 v.NiceName = "BadDrawable" 238 return v 239 } 240 241 // SequenceId returns the sequence id attached to the BadBadDrawable error. 242 // This is mostly used internally. 243 func (err BadDrawableError) SequenceId() uint16 { 244 return err.Sequence 245 } 246 247 // BadId returns the 'BadValue' number if one exists for the BadBadDrawable error. If no bad value exists, 0 is returned. 248 func (err BadDrawableError) BadId() uint32 { 249 return 0 250 } 251 252 // Error returns a rudimentary string representation of the BadBadDrawable error. 253 func (err BadDrawableError) Error() string { 254 fieldVals := make([]string, 0, 4) 255 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 256 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 257 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 258 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 259 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 260 return "BadBadDrawable {" + xgb.StringsJoin(fieldVals, ", ") + "}" 261 } 262 263 func init() { 264 xgb.NewExtErrorFuncs["GLX"][2] = BadDrawableErrorNew 265 } 266 267 // BadBadFBConfig is the error number for a BadBadFBConfig. 268 const BadBadFBConfig = 9 269 270 type BadFBConfigError GenericError 271 272 // BadFBConfigErrorNew constructs a BadFBConfigError value that implements xgb.Error from a byte slice. 273 func BadFBConfigErrorNew(buf []byte) xgb.Error { 274 v := BadFBConfigError(GenericErrorNew(buf).(GenericError)) 275 v.NiceName = "BadFBConfig" 276 return v 277 } 278 279 // SequenceId returns the sequence id attached to the BadBadFBConfig error. 280 // This is mostly used internally. 281 func (err BadFBConfigError) SequenceId() uint16 { 282 return err.Sequence 283 } 284 285 // BadId returns the 'BadValue' number if one exists for the BadBadFBConfig error. If no bad value exists, 0 is returned. 286 func (err BadFBConfigError) BadId() uint32 { 287 return 0 288 } 289 290 // Error returns a rudimentary string representation of the BadBadFBConfig error. 291 func (err BadFBConfigError) Error() string { 292 fieldVals := make([]string, 0, 4) 293 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 294 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 295 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 296 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 297 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 298 return "BadBadFBConfig {" + xgb.StringsJoin(fieldVals, ", ") + "}" 299 } 300 301 func init() { 302 xgb.NewExtErrorFuncs["GLX"][9] = BadFBConfigErrorNew 303 } 304 305 // BadBadLargeRequest is the error number for a BadBadLargeRequest. 306 const BadBadLargeRequest = 7 307 308 type BadLargeRequestError GenericError 309 310 // BadLargeRequestErrorNew constructs a BadLargeRequestError value that implements xgb.Error from a byte slice. 311 func BadLargeRequestErrorNew(buf []byte) xgb.Error { 312 v := BadLargeRequestError(GenericErrorNew(buf).(GenericError)) 313 v.NiceName = "BadLargeRequest" 314 return v 315 } 316 317 // SequenceId returns the sequence id attached to the BadBadLargeRequest error. 318 // This is mostly used internally. 319 func (err BadLargeRequestError) SequenceId() uint16 { 320 return err.Sequence 321 } 322 323 // BadId returns the 'BadValue' number if one exists for the BadBadLargeRequest error. If no bad value exists, 0 is returned. 324 func (err BadLargeRequestError) BadId() uint32 { 325 return 0 326 } 327 328 // Error returns a rudimentary string representation of the BadBadLargeRequest error. 329 func (err BadLargeRequestError) Error() string { 330 fieldVals := make([]string, 0, 4) 331 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 332 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 333 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 334 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 335 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 336 return "BadBadLargeRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}" 337 } 338 339 func init() { 340 xgb.NewExtErrorFuncs["GLX"][7] = BadLargeRequestErrorNew 341 } 342 343 // BadBadPbuffer is the error number for a BadBadPbuffer. 344 const BadBadPbuffer = 10 345 346 type BadPbufferError GenericError 347 348 // BadPbufferErrorNew constructs a BadPbufferError value that implements xgb.Error from a byte slice. 349 func BadPbufferErrorNew(buf []byte) xgb.Error { 350 v := BadPbufferError(GenericErrorNew(buf).(GenericError)) 351 v.NiceName = "BadPbuffer" 352 return v 353 } 354 355 // SequenceId returns the sequence id attached to the BadBadPbuffer error. 356 // This is mostly used internally. 357 func (err BadPbufferError) SequenceId() uint16 { 358 return err.Sequence 359 } 360 361 // BadId returns the 'BadValue' number if one exists for the BadBadPbuffer error. If no bad value exists, 0 is returned. 362 func (err BadPbufferError) BadId() uint32 { 363 return 0 364 } 365 366 // Error returns a rudimentary string representation of the BadBadPbuffer error. 367 func (err BadPbufferError) Error() string { 368 fieldVals := make([]string, 0, 4) 369 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 370 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 371 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 372 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 373 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 374 return "BadBadPbuffer {" + xgb.StringsJoin(fieldVals, ", ") + "}" 375 } 376 377 func init() { 378 xgb.NewExtErrorFuncs["GLX"][10] = BadPbufferErrorNew 379 } 380 381 // BadBadPixmap is the error number for a BadBadPixmap. 382 const BadBadPixmap = 3 383 384 type BadPixmapError GenericError 385 386 // BadPixmapErrorNew constructs a BadPixmapError value that implements xgb.Error from a byte slice. 387 func BadPixmapErrorNew(buf []byte) xgb.Error { 388 v := BadPixmapError(GenericErrorNew(buf).(GenericError)) 389 v.NiceName = "BadPixmap" 390 return v 391 } 392 393 // SequenceId returns the sequence id attached to the BadBadPixmap error. 394 // This is mostly used internally. 395 func (err BadPixmapError) SequenceId() uint16 { 396 return err.Sequence 397 } 398 399 // BadId returns the 'BadValue' number if one exists for the BadBadPixmap error. If no bad value exists, 0 is returned. 400 func (err BadPixmapError) BadId() uint32 { 401 return 0 402 } 403 404 // Error returns a rudimentary string representation of the BadBadPixmap error. 405 func (err BadPixmapError) Error() string { 406 fieldVals := make([]string, 0, 4) 407 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 408 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 409 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 410 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 411 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 412 return "BadBadPixmap {" + xgb.StringsJoin(fieldVals, ", ") + "}" 413 } 414 415 func init() { 416 xgb.NewExtErrorFuncs["GLX"][3] = BadPixmapErrorNew 417 } 418 419 // BadBadRenderRequest is the error number for a BadBadRenderRequest. 420 const BadBadRenderRequest = 6 421 422 type BadRenderRequestError GenericError 423 424 // BadRenderRequestErrorNew constructs a BadRenderRequestError value that implements xgb.Error from a byte slice. 425 func BadRenderRequestErrorNew(buf []byte) xgb.Error { 426 v := BadRenderRequestError(GenericErrorNew(buf).(GenericError)) 427 v.NiceName = "BadRenderRequest" 428 return v 429 } 430 431 // SequenceId returns the sequence id attached to the BadBadRenderRequest error. 432 // This is mostly used internally. 433 func (err BadRenderRequestError) SequenceId() uint16 { 434 return err.Sequence 435 } 436 437 // BadId returns the 'BadValue' number if one exists for the BadBadRenderRequest error. If no bad value exists, 0 is returned. 438 func (err BadRenderRequestError) BadId() uint32 { 439 return 0 440 } 441 442 // Error returns a rudimentary string representation of the BadBadRenderRequest error. 443 func (err BadRenderRequestError) Error() string { 444 fieldVals := make([]string, 0, 4) 445 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 446 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 447 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 448 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 449 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 450 return "BadBadRenderRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}" 451 } 452 453 func init() { 454 xgb.NewExtErrorFuncs["GLX"][6] = BadRenderRequestErrorNew 455 } 456 457 // BadBadWindow is the error number for a BadBadWindow. 458 const BadBadWindow = 12 459 460 type BadWindowError GenericError 461 462 // BadWindowErrorNew constructs a BadWindowError value that implements xgb.Error from a byte slice. 463 func BadWindowErrorNew(buf []byte) xgb.Error { 464 v := BadWindowError(GenericErrorNew(buf).(GenericError)) 465 v.NiceName = "BadWindow" 466 return v 467 } 468 469 // SequenceId returns the sequence id attached to the BadBadWindow error. 470 // This is mostly used internally. 471 func (err BadWindowError) SequenceId() uint16 { 472 return err.Sequence 473 } 474 475 // BadId returns the 'BadValue' number if one exists for the BadBadWindow error. If no bad value exists, 0 is returned. 476 func (err BadWindowError) BadId() uint32 { 477 return 0 478 } 479 480 // Error returns a rudimentary string representation of the BadBadWindow error. 481 func (err BadWindowError) Error() string { 482 fieldVals := make([]string, 0, 4) 483 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 484 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 485 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 486 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 487 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 488 return "BadBadWindow {" + xgb.StringsJoin(fieldVals, ", ") + "}" 489 } 490 491 func init() { 492 xgb.NewExtErrorFuncs["GLX"][12] = BadWindowErrorNew 493 } 494 495 type Bool32 uint32 496 497 // BufferSwapComplete is the event number for a BufferSwapCompleteEvent. 498 const BufferSwapComplete = 1 499 500 type BufferSwapCompleteEvent struct { 501 Sequence uint16 502 // padding: 1 bytes 503 EventType uint16 504 // padding: 2 bytes 505 Drawable Drawable 506 UstHi uint32 507 UstLo uint32 508 MscHi uint32 509 MscLo uint32 510 Sbc uint32 511 } 512 513 // BufferSwapCompleteEventNew constructs a BufferSwapCompleteEvent value that implements xgb.Event from a byte slice. 514 func BufferSwapCompleteEventNew(buf []byte) xgb.Event { 515 v := BufferSwapCompleteEvent{} 516 b := 1 // don't read event number 517 518 b += 1 // padding 519 520 v.Sequence = xgb.Get16(buf[b:]) 521 b += 2 522 523 v.EventType = xgb.Get16(buf[b:]) 524 b += 2 525 526 b += 2 // padding 527 528 v.Drawable = Drawable(xgb.Get32(buf[b:])) 529 b += 4 530 531 v.UstHi = xgb.Get32(buf[b:]) 532 b += 4 533 534 v.UstLo = xgb.Get32(buf[b:]) 535 b += 4 536 537 v.MscHi = xgb.Get32(buf[b:]) 538 b += 4 539 540 v.MscLo = xgb.Get32(buf[b:]) 541 b += 4 542 543 v.Sbc = xgb.Get32(buf[b:]) 544 b += 4 545 546 return v 547 } 548 549 // Bytes writes a BufferSwapCompleteEvent value to a byte slice. 550 func (v BufferSwapCompleteEvent) Bytes() []byte { 551 buf := make([]byte, 32) 552 b := 0 553 554 // write event number 555 buf[b] = 1 556 b += 1 557 558 b += 1 // padding 559 560 b += 2 // skip sequence number 561 562 xgb.Put16(buf[b:], v.EventType) 563 b += 2 564 565 b += 2 // padding 566 567 xgb.Put32(buf[b:], uint32(v.Drawable)) 568 b += 4 569 570 xgb.Put32(buf[b:], v.UstHi) 571 b += 4 572 573 xgb.Put32(buf[b:], v.UstLo) 574 b += 4 575 576 xgb.Put32(buf[b:], v.MscHi) 577 b += 4 578 579 xgb.Put32(buf[b:], v.MscLo) 580 b += 4 581 582 xgb.Put32(buf[b:], v.Sbc) 583 b += 4 584 585 return buf 586 } 587 588 // SequenceId returns the sequence id attached to the BufferSwapComplete event. 589 // Events without a sequence number (KeymapNotify) return 0. 590 // This is mostly used internally. 591 func (v BufferSwapCompleteEvent) SequenceId() uint16 { 592 return v.Sequence 593 } 594 595 // String is a rudimentary string representation of BufferSwapCompleteEvent. 596 func (v BufferSwapCompleteEvent) String() string { 597 fieldVals := make([]string, 0, 9) 598 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence)) 599 fieldVals = append(fieldVals, xgb.Sprintf("EventType: %d", v.EventType)) 600 fieldVals = append(fieldVals, xgb.Sprintf("Drawable: %d", v.Drawable)) 601 fieldVals = append(fieldVals, xgb.Sprintf("UstHi: %d", v.UstHi)) 602 fieldVals = append(fieldVals, xgb.Sprintf("UstLo: %d", v.UstLo)) 603 fieldVals = append(fieldVals, xgb.Sprintf("MscHi: %d", v.MscHi)) 604 fieldVals = append(fieldVals, xgb.Sprintf("MscLo: %d", v.MscLo)) 605 fieldVals = append(fieldVals, xgb.Sprintf("Sbc: %d", v.Sbc)) 606 return "BufferSwapComplete {" + xgb.StringsJoin(fieldVals, ", ") + "}" 607 } 608 609 func init() { 610 xgb.NewExtEventFuncs["GLX"][1] = BufferSwapCompleteEventNew 611 } 612 613 type Context uint32 614 615 func NewContextId(c *xgb.Conn) (Context, error) { 616 id, err := c.NewId() 617 if err != nil { 618 return 0, err 619 } 620 return Context(id), nil 621 } 622 623 type ContextTag uint32 624 625 type Drawable uint32 626 627 func NewDrawableId(c *xgb.Conn) (Drawable, error) { 628 id, err := c.NewId() 629 if err != nil { 630 return 0, err 631 } 632 return Drawable(id), nil 633 } 634 635 type Fbconfig uint32 636 637 func NewFbconfigId(c *xgb.Conn) (Fbconfig, error) { 638 id, err := c.NewId() 639 if err != nil { 640 return 0, err 641 } 642 return Fbconfig(id), nil 643 } 644 645 type Float32 float64 646 647 type Float64 float64 648 649 // BadGLXBadProfileARB is the error number for a BadGLXBadProfileARB. 650 const BadGLXBadProfileARB = 13 651 652 type GLXBadProfileARBError GenericError 653 654 // GLXBadProfileARBErrorNew constructs a GLXBadProfileARBError value that implements xgb.Error from a byte slice. 655 func GLXBadProfileARBErrorNew(buf []byte) xgb.Error { 656 v := GLXBadProfileARBError(GenericErrorNew(buf).(GenericError)) 657 v.NiceName = "GLXBadProfileARB" 658 return v 659 } 660 661 // SequenceId returns the sequence id attached to the BadGLXBadProfileARB error. 662 // This is mostly used internally. 663 func (err GLXBadProfileARBError) SequenceId() uint16 { 664 return err.Sequence 665 } 666 667 // BadId returns the 'BadValue' number if one exists for the BadGLXBadProfileARB error. If no bad value exists, 0 is returned. 668 func (err GLXBadProfileARBError) BadId() uint32 { 669 return 0 670 } 671 672 // Error returns a rudimentary string representation of the BadGLXBadProfileARB error. 673 func (err GLXBadProfileARBError) Error() string { 674 fieldVals := make([]string, 0, 4) 675 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 676 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 677 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 678 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 679 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 680 return "BadGLXBadProfileARB {" + xgb.StringsJoin(fieldVals, ", ") + "}" 681 } 682 683 func init() { 684 xgb.NewExtErrorFuncs["GLX"][13] = GLXBadProfileARBErrorNew 685 } 686 687 const ( 688 GcGlCurrentBit = 1 689 GcGlPointBit = 2 690 GcGlLineBit = 4 691 GcGlPolygonBit = 8 692 GcGlPolygonStippleBit = 16 693 GcGlPixelModeBit = 32 694 GcGlLightingBit = 64 695 GcGlFogBit = 128 696 GcGlDepthBufferBit = 256 697 GcGlAccumBufferBit = 512 698 GcGlStencilBufferBit = 1024 699 GcGlViewportBit = 2048 700 GcGlTransformBit = 4096 701 GcGlEnableBit = 8192 702 GcGlColorBufferBit = 16384 703 GcGlHintBit = 32768 704 GcGlEvalBit = 65536 705 GcGlListBit = 131072 706 GcGlTextureBit = 262144 707 GcGlScissorBit = 524288 708 GcGlAllAttribBits = 16777215 709 ) 710 711 // BadGeneric is the error number for a BadGeneric. 712 const BadGeneric = -1 713 714 type GenericError struct { 715 Sequence uint16 716 NiceName string 717 BadValue uint32 718 MinorOpcode uint16 719 MajorOpcode byte 720 // padding: 21 bytes 721 } 722 723 // GenericErrorNew constructs a GenericError value that implements xgb.Error from a byte slice. 724 func GenericErrorNew(buf []byte) xgb.Error { 725 v := GenericError{} 726 v.NiceName = "Generic" 727 728 b := 1 // skip error determinant 729 b += 1 // don't read error number 730 731 v.Sequence = xgb.Get16(buf[b:]) 732 b += 2 733 734 v.BadValue = xgb.Get32(buf[b:]) 735 b += 4 736 737 v.MinorOpcode = xgb.Get16(buf[b:]) 738 b += 2 739 740 v.MajorOpcode = buf[b] 741 b += 1 742 743 b += 21 // padding 744 745 return v 746 } 747 748 // SequenceId returns the sequence id attached to the BadGeneric error. 749 // This is mostly used internally. 750 func (err GenericError) SequenceId() uint16 { 751 return err.Sequence 752 } 753 754 // BadId returns the 'BadValue' number if one exists for the BadGeneric error. If no bad value exists, 0 is returned. 755 func (err GenericError) BadId() uint32 { 756 return 0 757 } 758 759 // Error returns a rudimentary string representation of the BadGeneric error. 760 761 func (err GenericError) Error() string { 762 fieldVals := make([]string, 0, 4) 763 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 764 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 765 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 766 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 767 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 768 return "BadGeneric {" + xgb.StringsJoin(fieldVals, ", ") + "}" 769 } 770 771 func init() { 772 xgb.NewExtErrorFuncs["GLX"][-1] = GenericErrorNew 773 } 774 775 const ( 776 PbcdtWindow = 32793 777 PbcdtPbuffer = 32794 778 ) 779 780 const ( 781 PbcetDamaged = 32791 782 PbcetSaved = 32792 783 ) 784 785 type Pbuffer uint32 786 787 func NewPbufferId(c *xgb.Conn) (Pbuffer, error) { 788 id, err := c.NewId() 789 if err != nil { 790 return 0, err 791 } 792 return Pbuffer(id), nil 793 } 794 795 // PbufferClobber is the event number for a PbufferClobberEvent. 796 const PbufferClobber = 0 797 798 type PbufferClobberEvent struct { 799 Sequence uint16 800 // padding: 1 bytes 801 EventType uint16 802 DrawType uint16 803 Drawable Drawable 804 BMask uint32 805 AuxBuffer uint16 806 X uint16 807 Y uint16 808 Width uint16 809 Height uint16 810 Count uint16 811 // padding: 4 bytes 812 } 813 814 // PbufferClobberEventNew constructs a PbufferClobberEvent value that implements xgb.Event from a byte slice. 815 func PbufferClobberEventNew(buf []byte) xgb.Event { 816 v := PbufferClobberEvent{} 817 b := 1 // don't read event number 818 819 b += 1 // padding 820 821 v.Sequence = xgb.Get16(buf[b:]) 822 b += 2 823 824 v.EventType = xgb.Get16(buf[b:]) 825 b += 2 826 827 v.DrawType = xgb.Get16(buf[b:]) 828 b += 2 829 830 v.Drawable = Drawable(xgb.Get32(buf[b:])) 831 b += 4 832 833 v.BMask = xgb.Get32(buf[b:]) 834 b += 4 835 836 v.AuxBuffer = xgb.Get16(buf[b:]) 837 b += 2 838 839 v.X = xgb.Get16(buf[b:]) 840 b += 2 841 842 v.Y = xgb.Get16(buf[b:]) 843 b += 2 844 845 v.Width = xgb.Get16(buf[b:]) 846 b += 2 847 848 v.Height = xgb.Get16(buf[b:]) 849 b += 2 850 851 v.Count = xgb.Get16(buf[b:]) 852 b += 2 853 854 b += 4 // padding 855 856 return v 857 } 858 859 // Bytes writes a PbufferClobberEvent value to a byte slice. 860 func (v PbufferClobberEvent) Bytes() []byte { 861 buf := make([]byte, 32) 862 b := 0 863 864 // write event number 865 buf[b] = 0 866 b += 1 867 868 b += 1 // padding 869 870 b += 2 // skip sequence number 871 872 xgb.Put16(buf[b:], v.EventType) 873 b += 2 874 875 xgb.Put16(buf[b:], v.DrawType) 876 b += 2 877 878 xgb.Put32(buf[b:], uint32(v.Drawable)) 879 b += 4 880 881 xgb.Put32(buf[b:], v.BMask) 882 b += 4 883 884 xgb.Put16(buf[b:], v.AuxBuffer) 885 b += 2 886 887 xgb.Put16(buf[b:], v.X) 888 b += 2 889 890 xgb.Put16(buf[b:], v.Y) 891 b += 2 892 893 xgb.Put16(buf[b:], v.Width) 894 b += 2 895 896 xgb.Put16(buf[b:], v.Height) 897 b += 2 898 899 xgb.Put16(buf[b:], v.Count) 900 b += 2 901 902 b += 4 // padding 903 904 return buf 905 } 906 907 // SequenceId returns the sequence id attached to the PbufferClobber event. 908 // Events without a sequence number (KeymapNotify) return 0. 909 // This is mostly used internally. 910 func (v PbufferClobberEvent) SequenceId() uint16 { 911 return v.Sequence 912 } 913 914 // String is a rudimentary string representation of PbufferClobberEvent. 915 func (v PbufferClobberEvent) String() string { 916 fieldVals := make([]string, 0, 12) 917 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence)) 918 fieldVals = append(fieldVals, xgb.Sprintf("EventType: %d", v.EventType)) 919 fieldVals = append(fieldVals, xgb.Sprintf("DrawType: %d", v.DrawType)) 920 fieldVals = append(fieldVals, xgb.Sprintf("Drawable: %d", v.Drawable)) 921 fieldVals = append(fieldVals, xgb.Sprintf("BMask: %d", v.BMask)) 922 fieldVals = append(fieldVals, xgb.Sprintf("AuxBuffer: %d", v.AuxBuffer)) 923 fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X)) 924 fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y)) 925 fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width)) 926 fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height)) 927 fieldVals = append(fieldVals, xgb.Sprintf("Count: %d", v.Count)) 928 return "PbufferClobber {" + xgb.StringsJoin(fieldVals, ", ") + "}" 929 } 930 931 func init() { 932 xgb.NewExtEventFuncs["GLX"][0] = PbufferClobberEventNew 933 } 934 935 type Pixmap uint32 936 937 func NewPixmapId(c *xgb.Conn) (Pixmap, error) { 938 id, err := c.NewId() 939 if err != nil { 940 return 0, err 941 } 942 return Pixmap(id), nil 943 } 944 945 const ( 946 RmGlRender = 7168 947 RmGlFeedback = 7169 948 RmGlSelect = 7170 949 ) 950 951 // BadUnsupportedPrivateRequest is the error number for a BadUnsupportedPrivateRequest. 952 const BadUnsupportedPrivateRequest = 8 953 954 type UnsupportedPrivateRequestError GenericError 955 956 // UnsupportedPrivateRequestErrorNew constructs a UnsupportedPrivateRequestError value that implements xgb.Error from a byte slice. 957 func UnsupportedPrivateRequestErrorNew(buf []byte) xgb.Error { 958 v := UnsupportedPrivateRequestError(GenericErrorNew(buf).(GenericError)) 959 v.NiceName = "UnsupportedPrivateRequest" 960 return v 961 } 962 963 // SequenceId returns the sequence id attached to the BadUnsupportedPrivateRequest error. 964 // This is mostly used internally. 965 func (err UnsupportedPrivateRequestError) SequenceId() uint16 { 966 return err.Sequence 967 } 968 969 // BadId returns the 'BadValue' number if one exists for the BadUnsupportedPrivateRequest error. If no bad value exists, 0 is returned. 970 func (err UnsupportedPrivateRequestError) BadId() uint32 { 971 return 0 972 } 973 974 // Error returns a rudimentary string representation of the BadUnsupportedPrivateRequest error. 975 func (err UnsupportedPrivateRequestError) Error() string { 976 fieldVals := make([]string, 0, 4) 977 fieldVals = append(fieldVals, "NiceName: "+err.NiceName) 978 fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence)) 979 fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue)) 980 fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode)) 981 fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode)) 982 return "BadUnsupportedPrivateRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}" 983 } 984 985 func init() { 986 xgb.NewExtErrorFuncs["GLX"][8] = UnsupportedPrivateRequestErrorNew 987 } 988 989 type Window uint32 990 991 func NewWindowId(c *xgb.Conn) (Window, error) { 992 id, err := c.NewId() 993 if err != nil { 994 return 0, err 995 } 996 return Window(id), nil 997 } 998 999 // Skipping definition for base type 'Bool' 1000 1001 // Skipping definition for base type 'Byte' 1002 1003 // Skipping definition for base type 'Card8' 1004 1005 // Skipping definition for base type 'Char' 1006 1007 // Skipping definition for base type 'Void' 1008 1009 // Skipping definition for base type 'Double' 1010 1011 // Skipping definition for base type 'Float' 1012 1013 // Skipping definition for base type 'Int16' 1014 1015 // Skipping definition for base type 'Int32' 1016 1017 // Skipping definition for base type 'Int8' 1018 1019 // Skipping definition for base type 'Card16' 1020 1021 // Skipping definition for base type 'Card32' 1022 1023 // AreTexturesResidentCookie is a cookie used only for AreTexturesResident requests. 1024 type AreTexturesResidentCookie struct { 1025 *xgb.Cookie 1026 } 1027 1028 // AreTexturesResident sends a checked request. 1029 // If an error occurs, it will be returned with the reply by calling AreTexturesResidentCookie.Reply() 1030 func AreTexturesResident(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) AreTexturesResidentCookie { 1031 c.ExtLock.RLock() 1032 defer c.ExtLock.RUnlock() 1033 if _, ok := c.Extensions["GLX"]; !ok { 1034 panic("Cannot issue request 'AreTexturesResident' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1035 } 1036 cookie := c.NewCookie(true, true) 1037 c.NewRequest(areTexturesResidentRequest(c, ContextTag, N, Textures), cookie) 1038 return AreTexturesResidentCookie{cookie} 1039 } 1040 1041 // AreTexturesResidentUnchecked sends an unchecked request. 1042 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1043 func AreTexturesResidentUnchecked(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) AreTexturesResidentCookie { 1044 c.ExtLock.RLock() 1045 defer c.ExtLock.RUnlock() 1046 if _, ok := c.Extensions["GLX"]; !ok { 1047 panic("Cannot issue request 'AreTexturesResident' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1048 } 1049 cookie := c.NewCookie(false, true) 1050 c.NewRequest(areTexturesResidentRequest(c, ContextTag, N, Textures), cookie) 1051 return AreTexturesResidentCookie{cookie} 1052 } 1053 1054 // AreTexturesResidentReply represents the data returned from a AreTexturesResident request. 1055 type AreTexturesResidentReply struct { 1056 Sequence uint16 // sequence number of the request for this reply 1057 Length uint32 // number of bytes in this reply 1058 // padding: 1 bytes 1059 RetVal Bool32 1060 // padding: 20 bytes 1061 Data []bool // size: xgb.Pad(((int(Length) * 4) * 1)) 1062 } 1063 1064 // Reply blocks and returns the reply data for a AreTexturesResident request. 1065 func (cook AreTexturesResidentCookie) Reply() (*AreTexturesResidentReply, error) { 1066 buf, err := cook.Cookie.Reply() 1067 if err != nil { 1068 return nil, err 1069 } 1070 if buf == nil { 1071 return nil, nil 1072 } 1073 return areTexturesResidentReply(buf), nil 1074 } 1075 1076 // areTexturesResidentReply reads a byte slice into a AreTexturesResidentReply value. 1077 func areTexturesResidentReply(buf []byte) *AreTexturesResidentReply { 1078 v := new(AreTexturesResidentReply) 1079 b := 1 // skip reply determinant 1080 1081 b += 1 // padding 1082 1083 v.Sequence = xgb.Get16(buf[b:]) 1084 b += 2 1085 1086 v.Length = xgb.Get32(buf[b:]) // 4-byte units 1087 b += 4 1088 1089 v.RetVal = Bool32(xgb.Get32(buf[b:])) 1090 b += 4 1091 1092 b += 20 // padding 1093 1094 v.Data = make([]bool, (int(v.Length) * 4)) 1095 for i := 0; i < int((int(v.Length) * 4)); i++ { 1096 if buf[b] == 1 { 1097 v.Data[i] = true 1098 } else { 1099 v.Data[i] = false 1100 } 1101 b += 1 1102 } 1103 1104 return v 1105 } 1106 1107 // Write request to wire for AreTexturesResident 1108 // areTexturesResidentRequest writes a AreTexturesResident request to a byte slice. 1109 func areTexturesResidentRequest(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) []byte { 1110 size := xgb.Pad((12 + xgb.Pad((int(N) * 4)))) 1111 b := 0 1112 buf := make([]byte, size) 1113 1114 c.ExtLock.RLock() 1115 buf[b] = c.Extensions["GLX"] 1116 c.ExtLock.RUnlock() 1117 b += 1 1118 1119 buf[b] = 143 // request opcode 1120 b += 1 1121 1122 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1123 b += 2 1124 1125 xgb.Put32(buf[b:], uint32(ContextTag)) 1126 b += 4 1127 1128 xgb.Put32(buf[b:], uint32(N)) 1129 b += 4 1130 1131 for i := 0; i < int(N); i++ { 1132 xgb.Put32(buf[b:], Textures[i]) 1133 b += 4 1134 } 1135 1136 return buf 1137 } 1138 1139 // ChangeDrawableAttributesCookie is a cookie used only for ChangeDrawableAttributes requests. 1140 type ChangeDrawableAttributesCookie struct { 1141 *xgb.Cookie 1142 } 1143 1144 // ChangeDrawableAttributes sends an unchecked request. 1145 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1146 func ChangeDrawableAttributes(c *xgb.Conn, Drawable Drawable, NumAttribs uint32, Attribs []uint32) ChangeDrawableAttributesCookie { 1147 c.ExtLock.RLock() 1148 defer c.ExtLock.RUnlock() 1149 if _, ok := c.Extensions["GLX"]; !ok { 1150 panic("Cannot issue request 'ChangeDrawableAttributes' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1151 } 1152 cookie := c.NewCookie(false, false) 1153 c.NewRequest(changeDrawableAttributesRequest(c, Drawable, NumAttribs, Attribs), cookie) 1154 return ChangeDrawableAttributesCookie{cookie} 1155 } 1156 1157 // ChangeDrawableAttributesChecked sends a checked request. 1158 // If an error occurs, it can be retrieved using ChangeDrawableAttributesCookie.Check() 1159 func ChangeDrawableAttributesChecked(c *xgb.Conn, Drawable Drawable, NumAttribs uint32, Attribs []uint32) ChangeDrawableAttributesCookie { 1160 c.ExtLock.RLock() 1161 defer c.ExtLock.RUnlock() 1162 if _, ok := c.Extensions["GLX"]; !ok { 1163 panic("Cannot issue request 'ChangeDrawableAttributes' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1164 } 1165 cookie := c.NewCookie(true, false) 1166 c.NewRequest(changeDrawableAttributesRequest(c, Drawable, NumAttribs, Attribs), cookie) 1167 return ChangeDrawableAttributesCookie{cookie} 1168 } 1169 1170 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1171 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1172 func (cook ChangeDrawableAttributesCookie) Check() error { 1173 return cook.Cookie.Check() 1174 } 1175 1176 // Write request to wire for ChangeDrawableAttributes 1177 // changeDrawableAttributesRequest writes a ChangeDrawableAttributes request to a byte slice. 1178 func changeDrawableAttributesRequest(c *xgb.Conn, Drawable Drawable, NumAttribs uint32, Attribs []uint32) []byte { 1179 size := xgb.Pad((12 + xgb.Pad(((int(NumAttribs) * 2) * 4)))) 1180 b := 0 1181 buf := make([]byte, size) 1182 1183 c.ExtLock.RLock() 1184 buf[b] = c.Extensions["GLX"] 1185 c.ExtLock.RUnlock() 1186 b += 1 1187 1188 buf[b] = 30 // request opcode 1189 b += 1 1190 1191 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1192 b += 2 1193 1194 xgb.Put32(buf[b:], uint32(Drawable)) 1195 b += 4 1196 1197 xgb.Put32(buf[b:], NumAttribs) 1198 b += 4 1199 1200 for i := 0; i < int((int(NumAttribs) * 2)); i++ { 1201 xgb.Put32(buf[b:], Attribs[i]) 1202 b += 4 1203 } 1204 1205 return buf 1206 } 1207 1208 // ClientInfoCookie is a cookie used only for ClientInfo requests. 1209 type ClientInfoCookie struct { 1210 *xgb.Cookie 1211 } 1212 1213 // ClientInfo sends an unchecked request. 1214 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1215 func ClientInfo(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32, StrLen uint32, String string) ClientInfoCookie { 1216 c.ExtLock.RLock() 1217 defer c.ExtLock.RUnlock() 1218 if _, ok := c.Extensions["GLX"]; !ok { 1219 panic("Cannot issue request 'ClientInfo' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1220 } 1221 cookie := c.NewCookie(false, false) 1222 c.NewRequest(clientInfoRequest(c, MajorVersion, MinorVersion, StrLen, String), cookie) 1223 return ClientInfoCookie{cookie} 1224 } 1225 1226 // ClientInfoChecked sends a checked request. 1227 // If an error occurs, it can be retrieved using ClientInfoCookie.Check() 1228 func ClientInfoChecked(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32, StrLen uint32, String string) ClientInfoCookie { 1229 c.ExtLock.RLock() 1230 defer c.ExtLock.RUnlock() 1231 if _, ok := c.Extensions["GLX"]; !ok { 1232 panic("Cannot issue request 'ClientInfo' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1233 } 1234 cookie := c.NewCookie(true, false) 1235 c.NewRequest(clientInfoRequest(c, MajorVersion, MinorVersion, StrLen, String), cookie) 1236 return ClientInfoCookie{cookie} 1237 } 1238 1239 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1240 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1241 func (cook ClientInfoCookie) Check() error { 1242 return cook.Cookie.Check() 1243 } 1244 1245 // Write request to wire for ClientInfo 1246 // clientInfoRequest writes a ClientInfo request to a byte slice. 1247 func clientInfoRequest(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32, StrLen uint32, String string) []byte { 1248 size := xgb.Pad((16 + xgb.Pad((int(StrLen) * 1)))) 1249 b := 0 1250 buf := make([]byte, size) 1251 1252 c.ExtLock.RLock() 1253 buf[b] = c.Extensions["GLX"] 1254 c.ExtLock.RUnlock() 1255 b += 1 1256 1257 buf[b] = 20 // request opcode 1258 b += 1 1259 1260 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1261 b += 2 1262 1263 xgb.Put32(buf[b:], MajorVersion) 1264 b += 4 1265 1266 xgb.Put32(buf[b:], MinorVersion) 1267 b += 4 1268 1269 xgb.Put32(buf[b:], StrLen) 1270 b += 4 1271 1272 copy(buf[b:], String[:StrLen]) 1273 b += int(StrLen) 1274 1275 return buf 1276 } 1277 1278 // CopyContextCookie is a cookie used only for CopyContext requests. 1279 type CopyContextCookie struct { 1280 *xgb.Cookie 1281 } 1282 1283 // CopyContext sends an unchecked request. 1284 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1285 func CopyContext(c *xgb.Conn, Src Context, Dest Context, Mask uint32, SrcContextTag ContextTag) CopyContextCookie { 1286 c.ExtLock.RLock() 1287 defer c.ExtLock.RUnlock() 1288 if _, ok := c.Extensions["GLX"]; !ok { 1289 panic("Cannot issue request 'CopyContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1290 } 1291 cookie := c.NewCookie(false, false) 1292 c.NewRequest(copyContextRequest(c, Src, Dest, Mask, SrcContextTag), cookie) 1293 return CopyContextCookie{cookie} 1294 } 1295 1296 // CopyContextChecked sends a checked request. 1297 // If an error occurs, it can be retrieved using CopyContextCookie.Check() 1298 func CopyContextChecked(c *xgb.Conn, Src Context, Dest Context, Mask uint32, SrcContextTag ContextTag) CopyContextCookie { 1299 c.ExtLock.RLock() 1300 defer c.ExtLock.RUnlock() 1301 if _, ok := c.Extensions["GLX"]; !ok { 1302 panic("Cannot issue request 'CopyContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1303 } 1304 cookie := c.NewCookie(true, false) 1305 c.NewRequest(copyContextRequest(c, Src, Dest, Mask, SrcContextTag), cookie) 1306 return CopyContextCookie{cookie} 1307 } 1308 1309 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1310 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1311 func (cook CopyContextCookie) Check() error { 1312 return cook.Cookie.Check() 1313 } 1314 1315 // Write request to wire for CopyContext 1316 // copyContextRequest writes a CopyContext request to a byte slice. 1317 func copyContextRequest(c *xgb.Conn, Src Context, Dest Context, Mask uint32, SrcContextTag ContextTag) []byte { 1318 size := 20 1319 b := 0 1320 buf := make([]byte, size) 1321 1322 c.ExtLock.RLock() 1323 buf[b] = c.Extensions["GLX"] 1324 c.ExtLock.RUnlock() 1325 b += 1 1326 1327 buf[b] = 10 // request opcode 1328 b += 1 1329 1330 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1331 b += 2 1332 1333 xgb.Put32(buf[b:], uint32(Src)) 1334 b += 4 1335 1336 xgb.Put32(buf[b:], uint32(Dest)) 1337 b += 4 1338 1339 xgb.Put32(buf[b:], Mask) 1340 b += 4 1341 1342 xgb.Put32(buf[b:], uint32(SrcContextTag)) 1343 b += 4 1344 1345 return buf 1346 } 1347 1348 // CreateContextCookie is a cookie used only for CreateContext requests. 1349 type CreateContextCookie struct { 1350 *xgb.Cookie 1351 } 1352 1353 // CreateContext sends an unchecked request. 1354 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1355 func CreateContext(c *xgb.Conn, Context Context, Visual xproto.Visualid, Screen uint32, ShareList Context, IsDirect bool) CreateContextCookie { 1356 c.ExtLock.RLock() 1357 defer c.ExtLock.RUnlock() 1358 if _, ok := c.Extensions["GLX"]; !ok { 1359 panic("Cannot issue request 'CreateContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1360 } 1361 cookie := c.NewCookie(false, false) 1362 c.NewRequest(createContextRequest(c, Context, Visual, Screen, ShareList, IsDirect), cookie) 1363 return CreateContextCookie{cookie} 1364 } 1365 1366 // CreateContextChecked sends a checked request. 1367 // If an error occurs, it can be retrieved using CreateContextCookie.Check() 1368 func CreateContextChecked(c *xgb.Conn, Context Context, Visual xproto.Visualid, Screen uint32, ShareList Context, IsDirect bool) CreateContextCookie { 1369 c.ExtLock.RLock() 1370 defer c.ExtLock.RUnlock() 1371 if _, ok := c.Extensions["GLX"]; !ok { 1372 panic("Cannot issue request 'CreateContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1373 } 1374 cookie := c.NewCookie(true, false) 1375 c.NewRequest(createContextRequest(c, Context, Visual, Screen, ShareList, IsDirect), cookie) 1376 return CreateContextCookie{cookie} 1377 } 1378 1379 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1380 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1381 func (cook CreateContextCookie) Check() error { 1382 return cook.Cookie.Check() 1383 } 1384 1385 // Write request to wire for CreateContext 1386 // createContextRequest writes a CreateContext request to a byte slice. 1387 func createContextRequest(c *xgb.Conn, Context Context, Visual xproto.Visualid, Screen uint32, ShareList Context, IsDirect bool) []byte { 1388 size := 24 1389 b := 0 1390 buf := make([]byte, size) 1391 1392 c.ExtLock.RLock() 1393 buf[b] = c.Extensions["GLX"] 1394 c.ExtLock.RUnlock() 1395 b += 1 1396 1397 buf[b] = 3 // request opcode 1398 b += 1 1399 1400 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1401 b += 2 1402 1403 xgb.Put32(buf[b:], uint32(Context)) 1404 b += 4 1405 1406 xgb.Put32(buf[b:], uint32(Visual)) 1407 b += 4 1408 1409 xgb.Put32(buf[b:], Screen) 1410 b += 4 1411 1412 xgb.Put32(buf[b:], uint32(ShareList)) 1413 b += 4 1414 1415 if IsDirect { 1416 buf[b] = 1 1417 } else { 1418 buf[b] = 0 1419 } 1420 b += 1 1421 1422 b += 3 // padding 1423 1424 return buf 1425 } 1426 1427 // CreateContextAttribsARBCookie is a cookie used only for CreateContextAttribsARB requests. 1428 type CreateContextAttribsARBCookie struct { 1429 *xgb.Cookie 1430 } 1431 1432 // CreateContextAttribsARB sends an unchecked request. 1433 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1434 func CreateContextAttribsARB(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen uint32, ShareList Context, IsDirect bool, NumAttribs uint32, Attribs []uint32) CreateContextAttribsARBCookie { 1435 c.ExtLock.RLock() 1436 defer c.ExtLock.RUnlock() 1437 if _, ok := c.Extensions["GLX"]; !ok { 1438 panic("Cannot issue request 'CreateContextAttribsARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1439 } 1440 cookie := c.NewCookie(false, false) 1441 c.NewRequest(createContextAttribsARBRequest(c, Context, Fbconfig, Screen, ShareList, IsDirect, NumAttribs, Attribs), cookie) 1442 return CreateContextAttribsARBCookie{cookie} 1443 } 1444 1445 // CreateContextAttribsARBChecked sends a checked request. 1446 // If an error occurs, it can be retrieved using CreateContextAttribsARBCookie.Check() 1447 func CreateContextAttribsARBChecked(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen uint32, ShareList Context, IsDirect bool, NumAttribs uint32, Attribs []uint32) CreateContextAttribsARBCookie { 1448 c.ExtLock.RLock() 1449 defer c.ExtLock.RUnlock() 1450 if _, ok := c.Extensions["GLX"]; !ok { 1451 panic("Cannot issue request 'CreateContextAttribsARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1452 } 1453 cookie := c.NewCookie(true, false) 1454 c.NewRequest(createContextAttribsARBRequest(c, Context, Fbconfig, Screen, ShareList, IsDirect, NumAttribs, Attribs), cookie) 1455 return CreateContextAttribsARBCookie{cookie} 1456 } 1457 1458 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1459 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1460 func (cook CreateContextAttribsARBCookie) Check() error { 1461 return cook.Cookie.Check() 1462 } 1463 1464 // Write request to wire for CreateContextAttribsARB 1465 // createContextAttribsARBRequest writes a CreateContextAttribsARB request to a byte slice. 1466 func createContextAttribsARBRequest(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen uint32, ShareList Context, IsDirect bool, NumAttribs uint32, Attribs []uint32) []byte { 1467 size := xgb.Pad((28 + xgb.Pad(((int(NumAttribs) * 2) * 4)))) 1468 b := 0 1469 buf := make([]byte, size) 1470 1471 c.ExtLock.RLock() 1472 buf[b] = c.Extensions["GLX"] 1473 c.ExtLock.RUnlock() 1474 b += 1 1475 1476 buf[b] = 34 // request opcode 1477 b += 1 1478 1479 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1480 b += 2 1481 1482 xgb.Put32(buf[b:], uint32(Context)) 1483 b += 4 1484 1485 xgb.Put32(buf[b:], uint32(Fbconfig)) 1486 b += 4 1487 1488 xgb.Put32(buf[b:], Screen) 1489 b += 4 1490 1491 xgb.Put32(buf[b:], uint32(ShareList)) 1492 b += 4 1493 1494 if IsDirect { 1495 buf[b] = 1 1496 } else { 1497 buf[b] = 0 1498 } 1499 b += 1 1500 1501 b += 3 // padding 1502 1503 xgb.Put32(buf[b:], NumAttribs) 1504 b += 4 1505 1506 for i := 0; i < int((int(NumAttribs) * 2)); i++ { 1507 xgb.Put32(buf[b:], Attribs[i]) 1508 b += 4 1509 } 1510 1511 return buf 1512 } 1513 1514 // CreateGLXPixmapCookie is a cookie used only for CreateGLXPixmap requests. 1515 type CreateGLXPixmapCookie struct { 1516 *xgb.Cookie 1517 } 1518 1519 // CreateGLXPixmap sends an unchecked request. 1520 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1521 func CreateGLXPixmap(c *xgb.Conn, Screen uint32, Visual xproto.Visualid, Pixmap xproto.Pixmap, GlxPixmap Pixmap) CreateGLXPixmapCookie { 1522 c.ExtLock.RLock() 1523 defer c.ExtLock.RUnlock() 1524 if _, ok := c.Extensions["GLX"]; !ok { 1525 panic("Cannot issue request 'CreateGLXPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1526 } 1527 cookie := c.NewCookie(false, false) 1528 c.NewRequest(createGLXPixmapRequest(c, Screen, Visual, Pixmap, GlxPixmap), cookie) 1529 return CreateGLXPixmapCookie{cookie} 1530 } 1531 1532 // CreateGLXPixmapChecked sends a checked request. 1533 // If an error occurs, it can be retrieved using CreateGLXPixmapCookie.Check() 1534 func CreateGLXPixmapChecked(c *xgb.Conn, Screen uint32, Visual xproto.Visualid, Pixmap xproto.Pixmap, GlxPixmap Pixmap) CreateGLXPixmapCookie { 1535 c.ExtLock.RLock() 1536 defer c.ExtLock.RUnlock() 1537 if _, ok := c.Extensions["GLX"]; !ok { 1538 panic("Cannot issue request 'CreateGLXPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1539 } 1540 cookie := c.NewCookie(true, false) 1541 c.NewRequest(createGLXPixmapRequest(c, Screen, Visual, Pixmap, GlxPixmap), cookie) 1542 return CreateGLXPixmapCookie{cookie} 1543 } 1544 1545 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1546 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1547 func (cook CreateGLXPixmapCookie) Check() error { 1548 return cook.Cookie.Check() 1549 } 1550 1551 // Write request to wire for CreateGLXPixmap 1552 // createGLXPixmapRequest writes a CreateGLXPixmap request to a byte slice. 1553 func createGLXPixmapRequest(c *xgb.Conn, Screen uint32, Visual xproto.Visualid, Pixmap xproto.Pixmap, GlxPixmap Pixmap) []byte { 1554 size := 20 1555 b := 0 1556 buf := make([]byte, size) 1557 1558 c.ExtLock.RLock() 1559 buf[b] = c.Extensions["GLX"] 1560 c.ExtLock.RUnlock() 1561 b += 1 1562 1563 buf[b] = 13 // request opcode 1564 b += 1 1565 1566 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1567 b += 2 1568 1569 xgb.Put32(buf[b:], Screen) 1570 b += 4 1571 1572 xgb.Put32(buf[b:], uint32(Visual)) 1573 b += 4 1574 1575 xgb.Put32(buf[b:], uint32(Pixmap)) 1576 b += 4 1577 1578 xgb.Put32(buf[b:], uint32(GlxPixmap)) 1579 b += 4 1580 1581 return buf 1582 } 1583 1584 // CreateNewContextCookie is a cookie used only for CreateNewContext requests. 1585 type CreateNewContextCookie struct { 1586 *xgb.Cookie 1587 } 1588 1589 // CreateNewContext sends an unchecked request. 1590 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1591 func CreateNewContext(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen uint32, RenderType uint32, ShareList Context, IsDirect bool) CreateNewContextCookie { 1592 c.ExtLock.RLock() 1593 defer c.ExtLock.RUnlock() 1594 if _, ok := c.Extensions["GLX"]; !ok { 1595 panic("Cannot issue request 'CreateNewContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1596 } 1597 cookie := c.NewCookie(false, false) 1598 c.NewRequest(createNewContextRequest(c, Context, Fbconfig, Screen, RenderType, ShareList, IsDirect), cookie) 1599 return CreateNewContextCookie{cookie} 1600 } 1601 1602 // CreateNewContextChecked sends a checked request. 1603 // If an error occurs, it can be retrieved using CreateNewContextCookie.Check() 1604 func CreateNewContextChecked(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen uint32, RenderType uint32, ShareList Context, IsDirect bool) CreateNewContextCookie { 1605 c.ExtLock.RLock() 1606 defer c.ExtLock.RUnlock() 1607 if _, ok := c.Extensions["GLX"]; !ok { 1608 panic("Cannot issue request 'CreateNewContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1609 } 1610 cookie := c.NewCookie(true, false) 1611 c.NewRequest(createNewContextRequest(c, Context, Fbconfig, Screen, RenderType, ShareList, IsDirect), cookie) 1612 return CreateNewContextCookie{cookie} 1613 } 1614 1615 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1616 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1617 func (cook CreateNewContextCookie) Check() error { 1618 return cook.Cookie.Check() 1619 } 1620 1621 // Write request to wire for CreateNewContext 1622 // createNewContextRequest writes a CreateNewContext request to a byte slice. 1623 func createNewContextRequest(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen uint32, RenderType uint32, ShareList Context, IsDirect bool) []byte { 1624 size := 28 1625 b := 0 1626 buf := make([]byte, size) 1627 1628 c.ExtLock.RLock() 1629 buf[b] = c.Extensions["GLX"] 1630 c.ExtLock.RUnlock() 1631 b += 1 1632 1633 buf[b] = 24 // request opcode 1634 b += 1 1635 1636 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1637 b += 2 1638 1639 xgb.Put32(buf[b:], uint32(Context)) 1640 b += 4 1641 1642 xgb.Put32(buf[b:], uint32(Fbconfig)) 1643 b += 4 1644 1645 xgb.Put32(buf[b:], Screen) 1646 b += 4 1647 1648 xgb.Put32(buf[b:], RenderType) 1649 b += 4 1650 1651 xgb.Put32(buf[b:], uint32(ShareList)) 1652 b += 4 1653 1654 if IsDirect { 1655 buf[b] = 1 1656 } else { 1657 buf[b] = 0 1658 } 1659 b += 1 1660 1661 b += 3 // padding 1662 1663 return buf 1664 } 1665 1666 // CreatePbufferCookie is a cookie used only for CreatePbuffer requests. 1667 type CreatePbufferCookie struct { 1668 *xgb.Cookie 1669 } 1670 1671 // CreatePbuffer sends an unchecked request. 1672 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1673 func CreatePbuffer(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pbuffer Pbuffer, NumAttribs uint32, Attribs []uint32) CreatePbufferCookie { 1674 c.ExtLock.RLock() 1675 defer c.ExtLock.RUnlock() 1676 if _, ok := c.Extensions["GLX"]; !ok { 1677 panic("Cannot issue request 'CreatePbuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1678 } 1679 cookie := c.NewCookie(false, false) 1680 c.NewRequest(createPbufferRequest(c, Screen, Fbconfig, Pbuffer, NumAttribs, Attribs), cookie) 1681 return CreatePbufferCookie{cookie} 1682 } 1683 1684 // CreatePbufferChecked sends a checked request. 1685 // If an error occurs, it can be retrieved using CreatePbufferCookie.Check() 1686 func CreatePbufferChecked(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pbuffer Pbuffer, NumAttribs uint32, Attribs []uint32) CreatePbufferCookie { 1687 c.ExtLock.RLock() 1688 defer c.ExtLock.RUnlock() 1689 if _, ok := c.Extensions["GLX"]; !ok { 1690 panic("Cannot issue request 'CreatePbuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1691 } 1692 cookie := c.NewCookie(true, false) 1693 c.NewRequest(createPbufferRequest(c, Screen, Fbconfig, Pbuffer, NumAttribs, Attribs), cookie) 1694 return CreatePbufferCookie{cookie} 1695 } 1696 1697 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1698 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1699 func (cook CreatePbufferCookie) Check() error { 1700 return cook.Cookie.Check() 1701 } 1702 1703 // Write request to wire for CreatePbuffer 1704 // createPbufferRequest writes a CreatePbuffer request to a byte slice. 1705 func createPbufferRequest(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pbuffer Pbuffer, NumAttribs uint32, Attribs []uint32) []byte { 1706 size := xgb.Pad((20 + xgb.Pad(((int(NumAttribs) * 2) * 4)))) 1707 b := 0 1708 buf := make([]byte, size) 1709 1710 c.ExtLock.RLock() 1711 buf[b] = c.Extensions["GLX"] 1712 c.ExtLock.RUnlock() 1713 b += 1 1714 1715 buf[b] = 27 // request opcode 1716 b += 1 1717 1718 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1719 b += 2 1720 1721 xgb.Put32(buf[b:], Screen) 1722 b += 4 1723 1724 xgb.Put32(buf[b:], uint32(Fbconfig)) 1725 b += 4 1726 1727 xgb.Put32(buf[b:], uint32(Pbuffer)) 1728 b += 4 1729 1730 xgb.Put32(buf[b:], NumAttribs) 1731 b += 4 1732 1733 for i := 0; i < int((int(NumAttribs) * 2)); i++ { 1734 xgb.Put32(buf[b:], Attribs[i]) 1735 b += 4 1736 } 1737 1738 return buf 1739 } 1740 1741 // CreatePixmapCookie is a cookie used only for CreatePixmap requests. 1742 type CreatePixmapCookie struct { 1743 *xgb.Cookie 1744 } 1745 1746 // CreatePixmap sends an unchecked request. 1747 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1748 func CreatePixmap(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pixmap xproto.Pixmap, GlxPixmap Pixmap, NumAttribs uint32, Attribs []uint32) CreatePixmapCookie { 1749 c.ExtLock.RLock() 1750 defer c.ExtLock.RUnlock() 1751 if _, ok := c.Extensions["GLX"]; !ok { 1752 panic("Cannot issue request 'CreatePixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1753 } 1754 cookie := c.NewCookie(false, false) 1755 c.NewRequest(createPixmapRequest(c, Screen, Fbconfig, Pixmap, GlxPixmap, NumAttribs, Attribs), cookie) 1756 return CreatePixmapCookie{cookie} 1757 } 1758 1759 // CreatePixmapChecked sends a checked request. 1760 // If an error occurs, it can be retrieved using CreatePixmapCookie.Check() 1761 func CreatePixmapChecked(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pixmap xproto.Pixmap, GlxPixmap Pixmap, NumAttribs uint32, Attribs []uint32) CreatePixmapCookie { 1762 c.ExtLock.RLock() 1763 defer c.ExtLock.RUnlock() 1764 if _, ok := c.Extensions["GLX"]; !ok { 1765 panic("Cannot issue request 'CreatePixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1766 } 1767 cookie := c.NewCookie(true, false) 1768 c.NewRequest(createPixmapRequest(c, Screen, Fbconfig, Pixmap, GlxPixmap, NumAttribs, Attribs), cookie) 1769 return CreatePixmapCookie{cookie} 1770 } 1771 1772 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1773 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1774 func (cook CreatePixmapCookie) Check() error { 1775 return cook.Cookie.Check() 1776 } 1777 1778 // Write request to wire for CreatePixmap 1779 // createPixmapRequest writes a CreatePixmap request to a byte slice. 1780 func createPixmapRequest(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pixmap xproto.Pixmap, GlxPixmap Pixmap, NumAttribs uint32, Attribs []uint32) []byte { 1781 size := xgb.Pad((24 + xgb.Pad(((int(NumAttribs) * 2) * 4)))) 1782 b := 0 1783 buf := make([]byte, size) 1784 1785 c.ExtLock.RLock() 1786 buf[b] = c.Extensions["GLX"] 1787 c.ExtLock.RUnlock() 1788 b += 1 1789 1790 buf[b] = 22 // request opcode 1791 b += 1 1792 1793 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1794 b += 2 1795 1796 xgb.Put32(buf[b:], Screen) 1797 b += 4 1798 1799 xgb.Put32(buf[b:], uint32(Fbconfig)) 1800 b += 4 1801 1802 xgb.Put32(buf[b:], uint32(Pixmap)) 1803 b += 4 1804 1805 xgb.Put32(buf[b:], uint32(GlxPixmap)) 1806 b += 4 1807 1808 xgb.Put32(buf[b:], NumAttribs) 1809 b += 4 1810 1811 for i := 0; i < int((int(NumAttribs) * 2)); i++ { 1812 xgb.Put32(buf[b:], Attribs[i]) 1813 b += 4 1814 } 1815 1816 return buf 1817 } 1818 1819 // CreateWindowCookie is a cookie used only for CreateWindow requests. 1820 type CreateWindowCookie struct { 1821 *xgb.Cookie 1822 } 1823 1824 // CreateWindow sends an unchecked request. 1825 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1826 func CreateWindow(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Window xproto.Window, GlxWindow Window, NumAttribs uint32, Attribs []uint32) CreateWindowCookie { 1827 c.ExtLock.RLock() 1828 defer c.ExtLock.RUnlock() 1829 if _, ok := c.Extensions["GLX"]; !ok { 1830 panic("Cannot issue request 'CreateWindow' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1831 } 1832 cookie := c.NewCookie(false, false) 1833 c.NewRequest(createWindowRequest(c, Screen, Fbconfig, Window, GlxWindow, NumAttribs, Attribs), cookie) 1834 return CreateWindowCookie{cookie} 1835 } 1836 1837 // CreateWindowChecked sends a checked request. 1838 // If an error occurs, it can be retrieved using CreateWindowCookie.Check() 1839 func CreateWindowChecked(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Window xproto.Window, GlxWindow Window, NumAttribs uint32, Attribs []uint32) CreateWindowCookie { 1840 c.ExtLock.RLock() 1841 defer c.ExtLock.RUnlock() 1842 if _, ok := c.Extensions["GLX"]; !ok { 1843 panic("Cannot issue request 'CreateWindow' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1844 } 1845 cookie := c.NewCookie(true, false) 1846 c.NewRequest(createWindowRequest(c, Screen, Fbconfig, Window, GlxWindow, NumAttribs, Attribs), cookie) 1847 return CreateWindowCookie{cookie} 1848 } 1849 1850 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1851 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1852 func (cook CreateWindowCookie) Check() error { 1853 return cook.Cookie.Check() 1854 } 1855 1856 // Write request to wire for CreateWindow 1857 // createWindowRequest writes a CreateWindow request to a byte slice. 1858 func createWindowRequest(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Window xproto.Window, GlxWindow Window, NumAttribs uint32, Attribs []uint32) []byte { 1859 size := xgb.Pad((24 + xgb.Pad(((int(NumAttribs) * 2) * 4)))) 1860 b := 0 1861 buf := make([]byte, size) 1862 1863 c.ExtLock.RLock() 1864 buf[b] = c.Extensions["GLX"] 1865 c.ExtLock.RUnlock() 1866 b += 1 1867 1868 buf[b] = 31 // request opcode 1869 b += 1 1870 1871 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1872 b += 2 1873 1874 xgb.Put32(buf[b:], Screen) 1875 b += 4 1876 1877 xgb.Put32(buf[b:], uint32(Fbconfig)) 1878 b += 4 1879 1880 xgb.Put32(buf[b:], uint32(Window)) 1881 b += 4 1882 1883 xgb.Put32(buf[b:], uint32(GlxWindow)) 1884 b += 4 1885 1886 xgb.Put32(buf[b:], NumAttribs) 1887 b += 4 1888 1889 for i := 0; i < int((int(NumAttribs) * 2)); i++ { 1890 xgb.Put32(buf[b:], Attribs[i]) 1891 b += 4 1892 } 1893 1894 return buf 1895 } 1896 1897 // DeleteListsCookie is a cookie used only for DeleteLists requests. 1898 type DeleteListsCookie struct { 1899 *xgb.Cookie 1900 } 1901 1902 // DeleteLists sends an unchecked request. 1903 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1904 func DeleteLists(c *xgb.Conn, ContextTag ContextTag, List uint32, Range int32) DeleteListsCookie { 1905 c.ExtLock.RLock() 1906 defer c.ExtLock.RUnlock() 1907 if _, ok := c.Extensions["GLX"]; !ok { 1908 panic("Cannot issue request 'DeleteLists' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1909 } 1910 cookie := c.NewCookie(false, false) 1911 c.NewRequest(deleteListsRequest(c, ContextTag, List, Range), cookie) 1912 return DeleteListsCookie{cookie} 1913 } 1914 1915 // DeleteListsChecked sends a checked request. 1916 // If an error occurs, it can be retrieved using DeleteListsCookie.Check() 1917 func DeleteListsChecked(c *xgb.Conn, ContextTag ContextTag, List uint32, Range int32) DeleteListsCookie { 1918 c.ExtLock.RLock() 1919 defer c.ExtLock.RUnlock() 1920 if _, ok := c.Extensions["GLX"]; !ok { 1921 panic("Cannot issue request 'DeleteLists' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1922 } 1923 cookie := c.NewCookie(true, false) 1924 c.NewRequest(deleteListsRequest(c, ContextTag, List, Range), cookie) 1925 return DeleteListsCookie{cookie} 1926 } 1927 1928 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1929 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1930 func (cook DeleteListsCookie) Check() error { 1931 return cook.Cookie.Check() 1932 } 1933 1934 // Write request to wire for DeleteLists 1935 // deleteListsRequest writes a DeleteLists request to a byte slice. 1936 func deleteListsRequest(c *xgb.Conn, ContextTag ContextTag, List uint32, Range int32) []byte { 1937 size := 16 1938 b := 0 1939 buf := make([]byte, size) 1940 1941 c.ExtLock.RLock() 1942 buf[b] = c.Extensions["GLX"] 1943 c.ExtLock.RUnlock() 1944 b += 1 1945 1946 buf[b] = 103 // request opcode 1947 b += 1 1948 1949 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 1950 b += 2 1951 1952 xgb.Put32(buf[b:], uint32(ContextTag)) 1953 b += 4 1954 1955 xgb.Put32(buf[b:], List) 1956 b += 4 1957 1958 xgb.Put32(buf[b:], uint32(Range)) 1959 b += 4 1960 1961 return buf 1962 } 1963 1964 // DeleteQueriesARBCookie is a cookie used only for DeleteQueriesARB requests. 1965 type DeleteQueriesARBCookie struct { 1966 *xgb.Cookie 1967 } 1968 1969 // DeleteQueriesARB sends an unchecked request. 1970 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 1971 func DeleteQueriesARB(c *xgb.Conn, ContextTag ContextTag, N int32, Ids []uint32) DeleteQueriesARBCookie { 1972 c.ExtLock.RLock() 1973 defer c.ExtLock.RUnlock() 1974 if _, ok := c.Extensions["GLX"]; !ok { 1975 panic("Cannot issue request 'DeleteQueriesARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1976 } 1977 cookie := c.NewCookie(false, false) 1978 c.NewRequest(deleteQueriesARBRequest(c, ContextTag, N, Ids), cookie) 1979 return DeleteQueriesARBCookie{cookie} 1980 } 1981 1982 // DeleteQueriesARBChecked sends a checked request. 1983 // If an error occurs, it can be retrieved using DeleteQueriesARBCookie.Check() 1984 func DeleteQueriesARBChecked(c *xgb.Conn, ContextTag ContextTag, N int32, Ids []uint32) DeleteQueriesARBCookie { 1985 c.ExtLock.RLock() 1986 defer c.ExtLock.RUnlock() 1987 if _, ok := c.Extensions["GLX"]; !ok { 1988 panic("Cannot issue request 'DeleteQueriesARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 1989 } 1990 cookie := c.NewCookie(true, false) 1991 c.NewRequest(deleteQueriesARBRequest(c, ContextTag, N, Ids), cookie) 1992 return DeleteQueriesARBCookie{cookie} 1993 } 1994 1995 // Check returns an error if one occurred for checked requests that are not expecting a reply. 1996 // This cannot be called for requests expecting a reply, nor for unchecked requests. 1997 func (cook DeleteQueriesARBCookie) Check() error { 1998 return cook.Cookie.Check() 1999 } 2000 2001 // Write request to wire for DeleteQueriesARB 2002 // deleteQueriesARBRequest writes a DeleteQueriesARB request to a byte slice. 2003 func deleteQueriesARBRequest(c *xgb.Conn, ContextTag ContextTag, N int32, Ids []uint32) []byte { 2004 size := xgb.Pad((12 + xgb.Pad((int(N) * 4)))) 2005 b := 0 2006 buf := make([]byte, size) 2007 2008 c.ExtLock.RLock() 2009 buf[b] = c.Extensions["GLX"] 2010 c.ExtLock.RUnlock() 2011 b += 1 2012 2013 buf[b] = 161 // request opcode 2014 b += 1 2015 2016 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2017 b += 2 2018 2019 xgb.Put32(buf[b:], uint32(ContextTag)) 2020 b += 4 2021 2022 xgb.Put32(buf[b:], uint32(N)) 2023 b += 4 2024 2025 for i := 0; i < int(N); i++ { 2026 xgb.Put32(buf[b:], Ids[i]) 2027 b += 4 2028 } 2029 2030 return buf 2031 } 2032 2033 // DeleteTexturesCookie is a cookie used only for DeleteTextures requests. 2034 type DeleteTexturesCookie struct { 2035 *xgb.Cookie 2036 } 2037 2038 // DeleteTextures sends an unchecked request. 2039 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2040 func DeleteTextures(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) DeleteTexturesCookie { 2041 c.ExtLock.RLock() 2042 defer c.ExtLock.RUnlock() 2043 if _, ok := c.Extensions["GLX"]; !ok { 2044 panic("Cannot issue request 'DeleteTextures' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2045 } 2046 cookie := c.NewCookie(false, false) 2047 c.NewRequest(deleteTexturesRequest(c, ContextTag, N, Textures), cookie) 2048 return DeleteTexturesCookie{cookie} 2049 } 2050 2051 // DeleteTexturesChecked sends a checked request. 2052 // If an error occurs, it can be retrieved using DeleteTexturesCookie.Check() 2053 func DeleteTexturesChecked(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) DeleteTexturesCookie { 2054 c.ExtLock.RLock() 2055 defer c.ExtLock.RUnlock() 2056 if _, ok := c.Extensions["GLX"]; !ok { 2057 panic("Cannot issue request 'DeleteTextures' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2058 } 2059 cookie := c.NewCookie(true, false) 2060 c.NewRequest(deleteTexturesRequest(c, ContextTag, N, Textures), cookie) 2061 return DeleteTexturesCookie{cookie} 2062 } 2063 2064 // Check returns an error if one occurred for checked requests that are not expecting a reply. 2065 // This cannot be called for requests expecting a reply, nor for unchecked requests. 2066 func (cook DeleteTexturesCookie) Check() error { 2067 return cook.Cookie.Check() 2068 } 2069 2070 // Write request to wire for DeleteTextures 2071 // deleteTexturesRequest writes a DeleteTextures request to a byte slice. 2072 func deleteTexturesRequest(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) []byte { 2073 size := xgb.Pad((12 + xgb.Pad((int(N) * 4)))) 2074 b := 0 2075 buf := make([]byte, size) 2076 2077 c.ExtLock.RLock() 2078 buf[b] = c.Extensions["GLX"] 2079 c.ExtLock.RUnlock() 2080 b += 1 2081 2082 buf[b] = 144 // request opcode 2083 b += 1 2084 2085 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2086 b += 2 2087 2088 xgb.Put32(buf[b:], uint32(ContextTag)) 2089 b += 4 2090 2091 xgb.Put32(buf[b:], uint32(N)) 2092 b += 4 2093 2094 for i := 0; i < int(N); i++ { 2095 xgb.Put32(buf[b:], Textures[i]) 2096 b += 4 2097 } 2098 2099 return buf 2100 } 2101 2102 // DeleteWindowCookie is a cookie used only for DeleteWindow requests. 2103 type DeleteWindowCookie struct { 2104 *xgb.Cookie 2105 } 2106 2107 // DeleteWindow sends an unchecked request. 2108 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2109 func DeleteWindow(c *xgb.Conn, Glxwindow Window) DeleteWindowCookie { 2110 c.ExtLock.RLock() 2111 defer c.ExtLock.RUnlock() 2112 if _, ok := c.Extensions["GLX"]; !ok { 2113 panic("Cannot issue request 'DeleteWindow' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2114 } 2115 cookie := c.NewCookie(false, false) 2116 c.NewRequest(deleteWindowRequest(c, Glxwindow), cookie) 2117 return DeleteWindowCookie{cookie} 2118 } 2119 2120 // DeleteWindowChecked sends a checked request. 2121 // If an error occurs, it can be retrieved using DeleteWindowCookie.Check() 2122 func DeleteWindowChecked(c *xgb.Conn, Glxwindow Window) DeleteWindowCookie { 2123 c.ExtLock.RLock() 2124 defer c.ExtLock.RUnlock() 2125 if _, ok := c.Extensions["GLX"]; !ok { 2126 panic("Cannot issue request 'DeleteWindow' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2127 } 2128 cookie := c.NewCookie(true, false) 2129 c.NewRequest(deleteWindowRequest(c, Glxwindow), cookie) 2130 return DeleteWindowCookie{cookie} 2131 } 2132 2133 // Check returns an error if one occurred for checked requests that are not expecting a reply. 2134 // This cannot be called for requests expecting a reply, nor for unchecked requests. 2135 func (cook DeleteWindowCookie) Check() error { 2136 return cook.Cookie.Check() 2137 } 2138 2139 // Write request to wire for DeleteWindow 2140 // deleteWindowRequest writes a DeleteWindow request to a byte slice. 2141 func deleteWindowRequest(c *xgb.Conn, Glxwindow Window) []byte { 2142 size := 8 2143 b := 0 2144 buf := make([]byte, size) 2145 2146 c.ExtLock.RLock() 2147 buf[b] = c.Extensions["GLX"] 2148 c.ExtLock.RUnlock() 2149 b += 1 2150 2151 buf[b] = 32 // request opcode 2152 b += 1 2153 2154 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2155 b += 2 2156 2157 xgb.Put32(buf[b:], uint32(Glxwindow)) 2158 b += 4 2159 2160 return buf 2161 } 2162 2163 // DestroyContextCookie is a cookie used only for DestroyContext requests. 2164 type DestroyContextCookie struct { 2165 *xgb.Cookie 2166 } 2167 2168 // DestroyContext sends an unchecked request. 2169 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2170 func DestroyContext(c *xgb.Conn, Context Context) DestroyContextCookie { 2171 c.ExtLock.RLock() 2172 defer c.ExtLock.RUnlock() 2173 if _, ok := c.Extensions["GLX"]; !ok { 2174 panic("Cannot issue request 'DestroyContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2175 } 2176 cookie := c.NewCookie(false, false) 2177 c.NewRequest(destroyContextRequest(c, Context), cookie) 2178 return DestroyContextCookie{cookie} 2179 } 2180 2181 // DestroyContextChecked sends a checked request. 2182 // If an error occurs, it can be retrieved using DestroyContextCookie.Check() 2183 func DestroyContextChecked(c *xgb.Conn, Context Context) DestroyContextCookie { 2184 c.ExtLock.RLock() 2185 defer c.ExtLock.RUnlock() 2186 if _, ok := c.Extensions["GLX"]; !ok { 2187 panic("Cannot issue request 'DestroyContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2188 } 2189 cookie := c.NewCookie(true, false) 2190 c.NewRequest(destroyContextRequest(c, Context), cookie) 2191 return DestroyContextCookie{cookie} 2192 } 2193 2194 // Check returns an error if one occurred for checked requests that are not expecting a reply. 2195 // This cannot be called for requests expecting a reply, nor for unchecked requests. 2196 func (cook DestroyContextCookie) Check() error { 2197 return cook.Cookie.Check() 2198 } 2199 2200 // Write request to wire for DestroyContext 2201 // destroyContextRequest writes a DestroyContext request to a byte slice. 2202 func destroyContextRequest(c *xgb.Conn, Context Context) []byte { 2203 size := 8 2204 b := 0 2205 buf := make([]byte, size) 2206 2207 c.ExtLock.RLock() 2208 buf[b] = c.Extensions["GLX"] 2209 c.ExtLock.RUnlock() 2210 b += 1 2211 2212 buf[b] = 4 // request opcode 2213 b += 1 2214 2215 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2216 b += 2 2217 2218 xgb.Put32(buf[b:], uint32(Context)) 2219 b += 4 2220 2221 return buf 2222 } 2223 2224 // DestroyGLXPixmapCookie is a cookie used only for DestroyGLXPixmap requests. 2225 type DestroyGLXPixmapCookie struct { 2226 *xgb.Cookie 2227 } 2228 2229 // DestroyGLXPixmap sends an unchecked request. 2230 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2231 func DestroyGLXPixmap(c *xgb.Conn, GlxPixmap Pixmap) DestroyGLXPixmapCookie { 2232 c.ExtLock.RLock() 2233 defer c.ExtLock.RUnlock() 2234 if _, ok := c.Extensions["GLX"]; !ok { 2235 panic("Cannot issue request 'DestroyGLXPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2236 } 2237 cookie := c.NewCookie(false, false) 2238 c.NewRequest(destroyGLXPixmapRequest(c, GlxPixmap), cookie) 2239 return DestroyGLXPixmapCookie{cookie} 2240 } 2241 2242 // DestroyGLXPixmapChecked sends a checked request. 2243 // If an error occurs, it can be retrieved using DestroyGLXPixmapCookie.Check() 2244 func DestroyGLXPixmapChecked(c *xgb.Conn, GlxPixmap Pixmap) DestroyGLXPixmapCookie { 2245 c.ExtLock.RLock() 2246 defer c.ExtLock.RUnlock() 2247 if _, ok := c.Extensions["GLX"]; !ok { 2248 panic("Cannot issue request 'DestroyGLXPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2249 } 2250 cookie := c.NewCookie(true, false) 2251 c.NewRequest(destroyGLXPixmapRequest(c, GlxPixmap), cookie) 2252 return DestroyGLXPixmapCookie{cookie} 2253 } 2254 2255 // Check returns an error if one occurred for checked requests that are not expecting a reply. 2256 // This cannot be called for requests expecting a reply, nor for unchecked requests. 2257 func (cook DestroyGLXPixmapCookie) Check() error { 2258 return cook.Cookie.Check() 2259 } 2260 2261 // Write request to wire for DestroyGLXPixmap 2262 // destroyGLXPixmapRequest writes a DestroyGLXPixmap request to a byte slice. 2263 func destroyGLXPixmapRequest(c *xgb.Conn, GlxPixmap Pixmap) []byte { 2264 size := 8 2265 b := 0 2266 buf := make([]byte, size) 2267 2268 c.ExtLock.RLock() 2269 buf[b] = c.Extensions["GLX"] 2270 c.ExtLock.RUnlock() 2271 b += 1 2272 2273 buf[b] = 15 // request opcode 2274 b += 1 2275 2276 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2277 b += 2 2278 2279 xgb.Put32(buf[b:], uint32(GlxPixmap)) 2280 b += 4 2281 2282 return buf 2283 } 2284 2285 // DestroyPbufferCookie is a cookie used only for DestroyPbuffer requests. 2286 type DestroyPbufferCookie struct { 2287 *xgb.Cookie 2288 } 2289 2290 // DestroyPbuffer sends an unchecked request. 2291 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2292 func DestroyPbuffer(c *xgb.Conn, Pbuffer Pbuffer) DestroyPbufferCookie { 2293 c.ExtLock.RLock() 2294 defer c.ExtLock.RUnlock() 2295 if _, ok := c.Extensions["GLX"]; !ok { 2296 panic("Cannot issue request 'DestroyPbuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2297 } 2298 cookie := c.NewCookie(false, false) 2299 c.NewRequest(destroyPbufferRequest(c, Pbuffer), cookie) 2300 return DestroyPbufferCookie{cookie} 2301 } 2302 2303 // DestroyPbufferChecked sends a checked request. 2304 // If an error occurs, it can be retrieved using DestroyPbufferCookie.Check() 2305 func DestroyPbufferChecked(c *xgb.Conn, Pbuffer Pbuffer) DestroyPbufferCookie { 2306 c.ExtLock.RLock() 2307 defer c.ExtLock.RUnlock() 2308 if _, ok := c.Extensions["GLX"]; !ok { 2309 panic("Cannot issue request 'DestroyPbuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2310 } 2311 cookie := c.NewCookie(true, false) 2312 c.NewRequest(destroyPbufferRequest(c, Pbuffer), cookie) 2313 return DestroyPbufferCookie{cookie} 2314 } 2315 2316 // Check returns an error if one occurred for checked requests that are not expecting a reply. 2317 // This cannot be called for requests expecting a reply, nor for unchecked requests. 2318 func (cook DestroyPbufferCookie) Check() error { 2319 return cook.Cookie.Check() 2320 } 2321 2322 // Write request to wire for DestroyPbuffer 2323 // destroyPbufferRequest writes a DestroyPbuffer request to a byte slice. 2324 func destroyPbufferRequest(c *xgb.Conn, Pbuffer Pbuffer) []byte { 2325 size := 8 2326 b := 0 2327 buf := make([]byte, size) 2328 2329 c.ExtLock.RLock() 2330 buf[b] = c.Extensions["GLX"] 2331 c.ExtLock.RUnlock() 2332 b += 1 2333 2334 buf[b] = 28 // request opcode 2335 b += 1 2336 2337 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2338 b += 2 2339 2340 xgb.Put32(buf[b:], uint32(Pbuffer)) 2341 b += 4 2342 2343 return buf 2344 } 2345 2346 // DestroyPixmapCookie is a cookie used only for DestroyPixmap requests. 2347 type DestroyPixmapCookie struct { 2348 *xgb.Cookie 2349 } 2350 2351 // DestroyPixmap sends an unchecked request. 2352 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2353 func DestroyPixmap(c *xgb.Conn, GlxPixmap Pixmap) DestroyPixmapCookie { 2354 c.ExtLock.RLock() 2355 defer c.ExtLock.RUnlock() 2356 if _, ok := c.Extensions["GLX"]; !ok { 2357 panic("Cannot issue request 'DestroyPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2358 } 2359 cookie := c.NewCookie(false, false) 2360 c.NewRequest(destroyPixmapRequest(c, GlxPixmap), cookie) 2361 return DestroyPixmapCookie{cookie} 2362 } 2363 2364 // DestroyPixmapChecked sends a checked request. 2365 // If an error occurs, it can be retrieved using DestroyPixmapCookie.Check() 2366 func DestroyPixmapChecked(c *xgb.Conn, GlxPixmap Pixmap) DestroyPixmapCookie { 2367 c.ExtLock.RLock() 2368 defer c.ExtLock.RUnlock() 2369 if _, ok := c.Extensions["GLX"]; !ok { 2370 panic("Cannot issue request 'DestroyPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2371 } 2372 cookie := c.NewCookie(true, false) 2373 c.NewRequest(destroyPixmapRequest(c, GlxPixmap), cookie) 2374 return DestroyPixmapCookie{cookie} 2375 } 2376 2377 // Check returns an error if one occurred for checked requests that are not expecting a reply. 2378 // This cannot be called for requests expecting a reply, nor for unchecked requests. 2379 func (cook DestroyPixmapCookie) Check() error { 2380 return cook.Cookie.Check() 2381 } 2382 2383 // Write request to wire for DestroyPixmap 2384 // destroyPixmapRequest writes a DestroyPixmap request to a byte slice. 2385 func destroyPixmapRequest(c *xgb.Conn, GlxPixmap Pixmap) []byte { 2386 size := 8 2387 b := 0 2388 buf := make([]byte, size) 2389 2390 c.ExtLock.RLock() 2391 buf[b] = c.Extensions["GLX"] 2392 c.ExtLock.RUnlock() 2393 b += 1 2394 2395 buf[b] = 23 // request opcode 2396 b += 1 2397 2398 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2399 b += 2 2400 2401 xgb.Put32(buf[b:], uint32(GlxPixmap)) 2402 b += 4 2403 2404 return buf 2405 } 2406 2407 // EndListCookie is a cookie used only for EndList requests. 2408 type EndListCookie struct { 2409 *xgb.Cookie 2410 } 2411 2412 // EndList sends an unchecked request. 2413 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2414 func EndList(c *xgb.Conn, ContextTag ContextTag) EndListCookie { 2415 c.ExtLock.RLock() 2416 defer c.ExtLock.RUnlock() 2417 if _, ok := c.Extensions["GLX"]; !ok { 2418 panic("Cannot issue request 'EndList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2419 } 2420 cookie := c.NewCookie(false, false) 2421 c.NewRequest(endListRequest(c, ContextTag), cookie) 2422 return EndListCookie{cookie} 2423 } 2424 2425 // EndListChecked sends a checked request. 2426 // If an error occurs, it can be retrieved using EndListCookie.Check() 2427 func EndListChecked(c *xgb.Conn, ContextTag ContextTag) EndListCookie { 2428 c.ExtLock.RLock() 2429 defer c.ExtLock.RUnlock() 2430 if _, ok := c.Extensions["GLX"]; !ok { 2431 panic("Cannot issue request 'EndList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2432 } 2433 cookie := c.NewCookie(true, false) 2434 c.NewRequest(endListRequest(c, ContextTag), cookie) 2435 return EndListCookie{cookie} 2436 } 2437 2438 // Check returns an error if one occurred for checked requests that are not expecting a reply. 2439 // This cannot be called for requests expecting a reply, nor for unchecked requests. 2440 func (cook EndListCookie) Check() error { 2441 return cook.Cookie.Check() 2442 } 2443 2444 // Write request to wire for EndList 2445 // endListRequest writes a EndList request to a byte slice. 2446 func endListRequest(c *xgb.Conn, ContextTag ContextTag) []byte { 2447 size := 8 2448 b := 0 2449 buf := make([]byte, size) 2450 2451 c.ExtLock.RLock() 2452 buf[b] = c.Extensions["GLX"] 2453 c.ExtLock.RUnlock() 2454 b += 1 2455 2456 buf[b] = 102 // request opcode 2457 b += 1 2458 2459 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2460 b += 2 2461 2462 xgb.Put32(buf[b:], uint32(ContextTag)) 2463 b += 4 2464 2465 return buf 2466 } 2467 2468 // FeedbackBufferCookie is a cookie used only for FeedbackBuffer requests. 2469 type FeedbackBufferCookie struct { 2470 *xgb.Cookie 2471 } 2472 2473 // FeedbackBuffer sends an unchecked request. 2474 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2475 func FeedbackBuffer(c *xgb.Conn, ContextTag ContextTag, Size int32, Type int32) FeedbackBufferCookie { 2476 c.ExtLock.RLock() 2477 defer c.ExtLock.RUnlock() 2478 if _, ok := c.Extensions["GLX"]; !ok { 2479 panic("Cannot issue request 'FeedbackBuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2480 } 2481 cookie := c.NewCookie(false, false) 2482 c.NewRequest(feedbackBufferRequest(c, ContextTag, Size, Type), cookie) 2483 return FeedbackBufferCookie{cookie} 2484 } 2485 2486 // FeedbackBufferChecked sends a checked request. 2487 // If an error occurs, it can be retrieved using FeedbackBufferCookie.Check() 2488 func FeedbackBufferChecked(c *xgb.Conn, ContextTag ContextTag, Size int32, Type int32) FeedbackBufferCookie { 2489 c.ExtLock.RLock() 2490 defer c.ExtLock.RUnlock() 2491 if _, ok := c.Extensions["GLX"]; !ok { 2492 panic("Cannot issue request 'FeedbackBuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2493 } 2494 cookie := c.NewCookie(true, false) 2495 c.NewRequest(feedbackBufferRequest(c, ContextTag, Size, Type), cookie) 2496 return FeedbackBufferCookie{cookie} 2497 } 2498 2499 // Check returns an error if one occurred for checked requests that are not expecting a reply. 2500 // This cannot be called for requests expecting a reply, nor for unchecked requests. 2501 func (cook FeedbackBufferCookie) Check() error { 2502 return cook.Cookie.Check() 2503 } 2504 2505 // Write request to wire for FeedbackBuffer 2506 // feedbackBufferRequest writes a FeedbackBuffer request to a byte slice. 2507 func feedbackBufferRequest(c *xgb.Conn, ContextTag ContextTag, Size int32, Type int32) []byte { 2508 size := 16 2509 b := 0 2510 buf := make([]byte, size) 2511 2512 c.ExtLock.RLock() 2513 buf[b] = c.Extensions["GLX"] 2514 c.ExtLock.RUnlock() 2515 b += 1 2516 2517 buf[b] = 105 // request opcode 2518 b += 1 2519 2520 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2521 b += 2 2522 2523 xgb.Put32(buf[b:], uint32(ContextTag)) 2524 b += 4 2525 2526 xgb.Put32(buf[b:], uint32(Size)) 2527 b += 4 2528 2529 xgb.Put32(buf[b:], uint32(Type)) 2530 b += 4 2531 2532 return buf 2533 } 2534 2535 // FinishCookie is a cookie used only for Finish requests. 2536 type FinishCookie struct { 2537 *xgb.Cookie 2538 } 2539 2540 // Finish sends a checked request. 2541 // If an error occurs, it will be returned with the reply by calling FinishCookie.Reply() 2542 func Finish(c *xgb.Conn, ContextTag ContextTag) FinishCookie { 2543 c.ExtLock.RLock() 2544 defer c.ExtLock.RUnlock() 2545 if _, ok := c.Extensions["GLX"]; !ok { 2546 panic("Cannot issue request 'Finish' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2547 } 2548 cookie := c.NewCookie(true, true) 2549 c.NewRequest(finishRequest(c, ContextTag), cookie) 2550 return FinishCookie{cookie} 2551 } 2552 2553 // FinishUnchecked sends an unchecked request. 2554 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2555 func FinishUnchecked(c *xgb.Conn, ContextTag ContextTag) FinishCookie { 2556 c.ExtLock.RLock() 2557 defer c.ExtLock.RUnlock() 2558 if _, ok := c.Extensions["GLX"]; !ok { 2559 panic("Cannot issue request 'Finish' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2560 } 2561 cookie := c.NewCookie(false, true) 2562 c.NewRequest(finishRequest(c, ContextTag), cookie) 2563 return FinishCookie{cookie} 2564 } 2565 2566 // FinishReply represents the data returned from a Finish request. 2567 type FinishReply struct { 2568 Sequence uint16 // sequence number of the request for this reply 2569 Length uint32 // number of bytes in this reply 2570 // padding: 1 bytes 2571 } 2572 2573 // Reply blocks and returns the reply data for a Finish request. 2574 func (cook FinishCookie) Reply() (*FinishReply, error) { 2575 buf, err := cook.Cookie.Reply() 2576 if err != nil { 2577 return nil, err 2578 } 2579 if buf == nil { 2580 return nil, nil 2581 } 2582 return finishReply(buf), nil 2583 } 2584 2585 // finishReply reads a byte slice into a FinishReply value. 2586 func finishReply(buf []byte) *FinishReply { 2587 v := new(FinishReply) 2588 b := 1 // skip reply determinant 2589 2590 b += 1 // padding 2591 2592 v.Sequence = xgb.Get16(buf[b:]) 2593 b += 2 2594 2595 v.Length = xgb.Get32(buf[b:]) // 4-byte units 2596 b += 4 2597 2598 return v 2599 } 2600 2601 // Write request to wire for Finish 2602 // finishRequest writes a Finish request to a byte slice. 2603 func finishRequest(c *xgb.Conn, ContextTag ContextTag) []byte { 2604 size := 8 2605 b := 0 2606 buf := make([]byte, size) 2607 2608 c.ExtLock.RLock() 2609 buf[b] = c.Extensions["GLX"] 2610 c.ExtLock.RUnlock() 2611 b += 1 2612 2613 buf[b] = 108 // request opcode 2614 b += 1 2615 2616 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2617 b += 2 2618 2619 xgb.Put32(buf[b:], uint32(ContextTag)) 2620 b += 4 2621 2622 return buf 2623 } 2624 2625 // FlushCookie is a cookie used only for Flush requests. 2626 type FlushCookie struct { 2627 *xgb.Cookie 2628 } 2629 2630 // Flush sends an unchecked request. 2631 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2632 func Flush(c *xgb.Conn, ContextTag ContextTag) FlushCookie { 2633 c.ExtLock.RLock() 2634 defer c.ExtLock.RUnlock() 2635 if _, ok := c.Extensions["GLX"]; !ok { 2636 panic("Cannot issue request 'Flush' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2637 } 2638 cookie := c.NewCookie(false, false) 2639 c.NewRequest(flushRequest(c, ContextTag), cookie) 2640 return FlushCookie{cookie} 2641 } 2642 2643 // FlushChecked sends a checked request. 2644 // If an error occurs, it can be retrieved using FlushCookie.Check() 2645 func FlushChecked(c *xgb.Conn, ContextTag ContextTag) FlushCookie { 2646 c.ExtLock.RLock() 2647 defer c.ExtLock.RUnlock() 2648 if _, ok := c.Extensions["GLX"]; !ok { 2649 panic("Cannot issue request 'Flush' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2650 } 2651 cookie := c.NewCookie(true, false) 2652 c.NewRequest(flushRequest(c, ContextTag), cookie) 2653 return FlushCookie{cookie} 2654 } 2655 2656 // Check returns an error if one occurred for checked requests that are not expecting a reply. 2657 // This cannot be called for requests expecting a reply, nor for unchecked requests. 2658 func (cook FlushCookie) Check() error { 2659 return cook.Cookie.Check() 2660 } 2661 2662 // Write request to wire for Flush 2663 // flushRequest writes a Flush request to a byte slice. 2664 func flushRequest(c *xgb.Conn, ContextTag ContextTag) []byte { 2665 size := 8 2666 b := 0 2667 buf := make([]byte, size) 2668 2669 c.ExtLock.RLock() 2670 buf[b] = c.Extensions["GLX"] 2671 c.ExtLock.RUnlock() 2672 b += 1 2673 2674 buf[b] = 142 // request opcode 2675 b += 1 2676 2677 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2678 b += 2 2679 2680 xgb.Put32(buf[b:], uint32(ContextTag)) 2681 b += 4 2682 2683 return buf 2684 } 2685 2686 // GenListsCookie is a cookie used only for GenLists requests. 2687 type GenListsCookie struct { 2688 *xgb.Cookie 2689 } 2690 2691 // GenLists sends a checked request. 2692 // If an error occurs, it will be returned with the reply by calling GenListsCookie.Reply() 2693 func GenLists(c *xgb.Conn, ContextTag ContextTag, Range int32) GenListsCookie { 2694 c.ExtLock.RLock() 2695 defer c.ExtLock.RUnlock() 2696 if _, ok := c.Extensions["GLX"]; !ok { 2697 panic("Cannot issue request 'GenLists' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2698 } 2699 cookie := c.NewCookie(true, true) 2700 c.NewRequest(genListsRequest(c, ContextTag, Range), cookie) 2701 return GenListsCookie{cookie} 2702 } 2703 2704 // GenListsUnchecked sends an unchecked request. 2705 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2706 func GenListsUnchecked(c *xgb.Conn, ContextTag ContextTag, Range int32) GenListsCookie { 2707 c.ExtLock.RLock() 2708 defer c.ExtLock.RUnlock() 2709 if _, ok := c.Extensions["GLX"]; !ok { 2710 panic("Cannot issue request 'GenLists' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2711 } 2712 cookie := c.NewCookie(false, true) 2713 c.NewRequest(genListsRequest(c, ContextTag, Range), cookie) 2714 return GenListsCookie{cookie} 2715 } 2716 2717 // GenListsReply represents the data returned from a GenLists request. 2718 type GenListsReply struct { 2719 Sequence uint16 // sequence number of the request for this reply 2720 Length uint32 // number of bytes in this reply 2721 // padding: 1 bytes 2722 RetVal uint32 2723 } 2724 2725 // Reply blocks and returns the reply data for a GenLists request. 2726 func (cook GenListsCookie) Reply() (*GenListsReply, error) { 2727 buf, err := cook.Cookie.Reply() 2728 if err != nil { 2729 return nil, err 2730 } 2731 if buf == nil { 2732 return nil, nil 2733 } 2734 return genListsReply(buf), nil 2735 } 2736 2737 // genListsReply reads a byte slice into a GenListsReply value. 2738 func genListsReply(buf []byte) *GenListsReply { 2739 v := new(GenListsReply) 2740 b := 1 // skip reply determinant 2741 2742 b += 1 // padding 2743 2744 v.Sequence = xgb.Get16(buf[b:]) 2745 b += 2 2746 2747 v.Length = xgb.Get32(buf[b:]) // 4-byte units 2748 b += 4 2749 2750 v.RetVal = xgb.Get32(buf[b:]) 2751 b += 4 2752 2753 return v 2754 } 2755 2756 // Write request to wire for GenLists 2757 // genListsRequest writes a GenLists request to a byte slice. 2758 func genListsRequest(c *xgb.Conn, ContextTag ContextTag, Range int32) []byte { 2759 size := 12 2760 b := 0 2761 buf := make([]byte, size) 2762 2763 c.ExtLock.RLock() 2764 buf[b] = c.Extensions["GLX"] 2765 c.ExtLock.RUnlock() 2766 b += 1 2767 2768 buf[b] = 104 // request opcode 2769 b += 1 2770 2771 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2772 b += 2 2773 2774 xgb.Put32(buf[b:], uint32(ContextTag)) 2775 b += 4 2776 2777 xgb.Put32(buf[b:], uint32(Range)) 2778 b += 4 2779 2780 return buf 2781 } 2782 2783 // GenQueriesARBCookie is a cookie used only for GenQueriesARB requests. 2784 type GenQueriesARBCookie struct { 2785 *xgb.Cookie 2786 } 2787 2788 // GenQueriesARB sends a checked request. 2789 // If an error occurs, it will be returned with the reply by calling GenQueriesARBCookie.Reply() 2790 func GenQueriesARB(c *xgb.Conn, ContextTag ContextTag, N int32) GenQueriesARBCookie { 2791 c.ExtLock.RLock() 2792 defer c.ExtLock.RUnlock() 2793 if _, ok := c.Extensions["GLX"]; !ok { 2794 panic("Cannot issue request 'GenQueriesARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2795 } 2796 cookie := c.NewCookie(true, true) 2797 c.NewRequest(genQueriesARBRequest(c, ContextTag, N), cookie) 2798 return GenQueriesARBCookie{cookie} 2799 } 2800 2801 // GenQueriesARBUnchecked sends an unchecked request. 2802 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2803 func GenQueriesARBUnchecked(c *xgb.Conn, ContextTag ContextTag, N int32) GenQueriesARBCookie { 2804 c.ExtLock.RLock() 2805 defer c.ExtLock.RUnlock() 2806 if _, ok := c.Extensions["GLX"]; !ok { 2807 panic("Cannot issue request 'GenQueriesARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2808 } 2809 cookie := c.NewCookie(false, true) 2810 c.NewRequest(genQueriesARBRequest(c, ContextTag, N), cookie) 2811 return GenQueriesARBCookie{cookie} 2812 } 2813 2814 // GenQueriesARBReply represents the data returned from a GenQueriesARB request. 2815 type GenQueriesARBReply struct { 2816 Sequence uint16 // sequence number of the request for this reply 2817 Length uint32 // number of bytes in this reply 2818 // padding: 1 bytes 2819 // padding: 24 bytes 2820 Data []uint32 // size: xgb.Pad((int(Length) * 4)) 2821 } 2822 2823 // Reply blocks and returns the reply data for a GenQueriesARB request. 2824 func (cook GenQueriesARBCookie) Reply() (*GenQueriesARBReply, error) { 2825 buf, err := cook.Cookie.Reply() 2826 if err != nil { 2827 return nil, err 2828 } 2829 if buf == nil { 2830 return nil, nil 2831 } 2832 return genQueriesARBReply(buf), nil 2833 } 2834 2835 // genQueriesARBReply reads a byte slice into a GenQueriesARBReply value. 2836 func genQueriesARBReply(buf []byte) *GenQueriesARBReply { 2837 v := new(GenQueriesARBReply) 2838 b := 1 // skip reply determinant 2839 2840 b += 1 // padding 2841 2842 v.Sequence = xgb.Get16(buf[b:]) 2843 b += 2 2844 2845 v.Length = xgb.Get32(buf[b:]) // 4-byte units 2846 b += 4 2847 2848 b += 24 // padding 2849 2850 v.Data = make([]uint32, v.Length) 2851 for i := 0; i < int(v.Length); i++ { 2852 v.Data[i] = xgb.Get32(buf[b:]) 2853 b += 4 2854 } 2855 2856 return v 2857 } 2858 2859 // Write request to wire for GenQueriesARB 2860 // genQueriesARBRequest writes a GenQueriesARB request to a byte slice. 2861 func genQueriesARBRequest(c *xgb.Conn, ContextTag ContextTag, N int32) []byte { 2862 size := 12 2863 b := 0 2864 buf := make([]byte, size) 2865 2866 c.ExtLock.RLock() 2867 buf[b] = c.Extensions["GLX"] 2868 c.ExtLock.RUnlock() 2869 b += 1 2870 2871 buf[b] = 162 // request opcode 2872 b += 1 2873 2874 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2875 b += 2 2876 2877 xgb.Put32(buf[b:], uint32(ContextTag)) 2878 b += 4 2879 2880 xgb.Put32(buf[b:], uint32(N)) 2881 b += 4 2882 2883 return buf 2884 } 2885 2886 // GenTexturesCookie is a cookie used only for GenTextures requests. 2887 type GenTexturesCookie struct { 2888 *xgb.Cookie 2889 } 2890 2891 // GenTextures sends a checked request. 2892 // If an error occurs, it will be returned with the reply by calling GenTexturesCookie.Reply() 2893 func GenTextures(c *xgb.Conn, ContextTag ContextTag, N int32) GenTexturesCookie { 2894 c.ExtLock.RLock() 2895 defer c.ExtLock.RUnlock() 2896 if _, ok := c.Extensions["GLX"]; !ok { 2897 panic("Cannot issue request 'GenTextures' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2898 } 2899 cookie := c.NewCookie(true, true) 2900 c.NewRequest(genTexturesRequest(c, ContextTag, N), cookie) 2901 return GenTexturesCookie{cookie} 2902 } 2903 2904 // GenTexturesUnchecked sends an unchecked request. 2905 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 2906 func GenTexturesUnchecked(c *xgb.Conn, ContextTag ContextTag, N int32) GenTexturesCookie { 2907 c.ExtLock.RLock() 2908 defer c.ExtLock.RUnlock() 2909 if _, ok := c.Extensions["GLX"]; !ok { 2910 panic("Cannot issue request 'GenTextures' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 2911 } 2912 cookie := c.NewCookie(false, true) 2913 c.NewRequest(genTexturesRequest(c, ContextTag, N), cookie) 2914 return GenTexturesCookie{cookie} 2915 } 2916 2917 // GenTexturesReply represents the data returned from a GenTextures request. 2918 type GenTexturesReply struct { 2919 Sequence uint16 // sequence number of the request for this reply 2920 Length uint32 // number of bytes in this reply 2921 // padding: 1 bytes 2922 // padding: 24 bytes 2923 Data []uint32 // size: xgb.Pad((int(Length) * 4)) 2924 } 2925 2926 // Reply blocks and returns the reply data for a GenTextures request. 2927 func (cook GenTexturesCookie) Reply() (*GenTexturesReply, error) { 2928 buf, err := cook.Cookie.Reply() 2929 if err != nil { 2930 return nil, err 2931 } 2932 if buf == nil { 2933 return nil, nil 2934 } 2935 return genTexturesReply(buf), nil 2936 } 2937 2938 // genTexturesReply reads a byte slice into a GenTexturesReply value. 2939 func genTexturesReply(buf []byte) *GenTexturesReply { 2940 v := new(GenTexturesReply) 2941 b := 1 // skip reply determinant 2942 2943 b += 1 // padding 2944 2945 v.Sequence = xgb.Get16(buf[b:]) 2946 b += 2 2947 2948 v.Length = xgb.Get32(buf[b:]) // 4-byte units 2949 b += 4 2950 2951 b += 24 // padding 2952 2953 v.Data = make([]uint32, v.Length) 2954 for i := 0; i < int(v.Length); i++ { 2955 v.Data[i] = xgb.Get32(buf[b:]) 2956 b += 4 2957 } 2958 2959 return v 2960 } 2961 2962 // Write request to wire for GenTextures 2963 // genTexturesRequest writes a GenTextures request to a byte slice. 2964 func genTexturesRequest(c *xgb.Conn, ContextTag ContextTag, N int32) []byte { 2965 size := 12 2966 b := 0 2967 buf := make([]byte, size) 2968 2969 c.ExtLock.RLock() 2970 buf[b] = c.Extensions["GLX"] 2971 c.ExtLock.RUnlock() 2972 b += 1 2973 2974 buf[b] = 145 // request opcode 2975 b += 1 2976 2977 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 2978 b += 2 2979 2980 xgb.Put32(buf[b:], uint32(ContextTag)) 2981 b += 4 2982 2983 xgb.Put32(buf[b:], uint32(N)) 2984 b += 4 2985 2986 return buf 2987 } 2988 2989 // GetBooleanvCookie is a cookie used only for GetBooleanv requests. 2990 type GetBooleanvCookie struct { 2991 *xgb.Cookie 2992 } 2993 2994 // GetBooleanv sends a checked request. 2995 // If an error occurs, it will be returned with the reply by calling GetBooleanvCookie.Reply() 2996 func GetBooleanv(c *xgb.Conn, ContextTag ContextTag, Pname int32) GetBooleanvCookie { 2997 c.ExtLock.RLock() 2998 defer c.ExtLock.RUnlock() 2999 if _, ok := c.Extensions["GLX"]; !ok { 3000 panic("Cannot issue request 'GetBooleanv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3001 } 3002 cookie := c.NewCookie(true, true) 3003 c.NewRequest(getBooleanvRequest(c, ContextTag, Pname), cookie) 3004 return GetBooleanvCookie{cookie} 3005 } 3006 3007 // GetBooleanvUnchecked sends an unchecked request. 3008 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 3009 func GetBooleanvUnchecked(c *xgb.Conn, ContextTag ContextTag, Pname int32) GetBooleanvCookie { 3010 c.ExtLock.RLock() 3011 defer c.ExtLock.RUnlock() 3012 if _, ok := c.Extensions["GLX"]; !ok { 3013 panic("Cannot issue request 'GetBooleanv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3014 } 3015 cookie := c.NewCookie(false, true) 3016 c.NewRequest(getBooleanvRequest(c, ContextTag, Pname), cookie) 3017 return GetBooleanvCookie{cookie} 3018 } 3019 3020 // GetBooleanvReply represents the data returned from a GetBooleanv request. 3021 type GetBooleanvReply struct { 3022 Sequence uint16 // sequence number of the request for this reply 3023 Length uint32 // number of bytes in this reply 3024 // padding: 1 bytes 3025 // padding: 4 bytes 3026 N uint32 3027 Datum bool 3028 // padding: 15 bytes 3029 Data []bool // size: xgb.Pad((int(N) * 1)) 3030 } 3031 3032 // Reply blocks and returns the reply data for a GetBooleanv request. 3033 func (cook GetBooleanvCookie) Reply() (*GetBooleanvReply, error) { 3034 buf, err := cook.Cookie.Reply() 3035 if err != nil { 3036 return nil, err 3037 } 3038 if buf == nil { 3039 return nil, nil 3040 } 3041 return getBooleanvReply(buf), nil 3042 } 3043 3044 // getBooleanvReply reads a byte slice into a GetBooleanvReply value. 3045 func getBooleanvReply(buf []byte) *GetBooleanvReply { 3046 v := new(GetBooleanvReply) 3047 b := 1 // skip reply determinant 3048 3049 b += 1 // padding 3050 3051 v.Sequence = xgb.Get16(buf[b:]) 3052 b += 2 3053 3054 v.Length = xgb.Get32(buf[b:]) // 4-byte units 3055 b += 4 3056 3057 b += 4 // padding 3058 3059 v.N = xgb.Get32(buf[b:]) 3060 b += 4 3061 3062 if buf[b] == 1 { 3063 v.Datum = true 3064 } else { 3065 v.Datum = false 3066 } 3067 b += 1 3068 3069 b += 15 // padding 3070 3071 v.Data = make([]bool, v.N) 3072 for i := 0; i < int(v.N); i++ { 3073 if buf[b] == 1 { 3074 v.Data[i] = true 3075 } else { 3076 v.Data[i] = false 3077 } 3078 b += 1 3079 } 3080 3081 return v 3082 } 3083 3084 // Write request to wire for GetBooleanv 3085 // getBooleanvRequest writes a GetBooleanv request to a byte slice. 3086 func getBooleanvRequest(c *xgb.Conn, ContextTag ContextTag, Pname int32) []byte { 3087 size := 12 3088 b := 0 3089 buf := make([]byte, size) 3090 3091 c.ExtLock.RLock() 3092 buf[b] = c.Extensions["GLX"] 3093 c.ExtLock.RUnlock() 3094 b += 1 3095 3096 buf[b] = 112 // request opcode 3097 b += 1 3098 3099 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 3100 b += 2 3101 3102 xgb.Put32(buf[b:], uint32(ContextTag)) 3103 b += 4 3104 3105 xgb.Put32(buf[b:], uint32(Pname)) 3106 b += 4 3107 3108 return buf 3109 } 3110 3111 // GetClipPlaneCookie is a cookie used only for GetClipPlane requests. 3112 type GetClipPlaneCookie struct { 3113 *xgb.Cookie 3114 } 3115 3116 // GetClipPlane sends a checked request. 3117 // If an error occurs, it will be returned with the reply by calling GetClipPlaneCookie.Reply() 3118 func GetClipPlane(c *xgb.Conn, ContextTag ContextTag, Plane int32) GetClipPlaneCookie { 3119 c.ExtLock.RLock() 3120 defer c.ExtLock.RUnlock() 3121 if _, ok := c.Extensions["GLX"]; !ok { 3122 panic("Cannot issue request 'GetClipPlane' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3123 } 3124 cookie := c.NewCookie(true, true) 3125 c.NewRequest(getClipPlaneRequest(c, ContextTag, Plane), cookie) 3126 return GetClipPlaneCookie{cookie} 3127 } 3128 3129 // GetClipPlaneUnchecked sends an unchecked request. 3130 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 3131 func GetClipPlaneUnchecked(c *xgb.Conn, ContextTag ContextTag, Plane int32) GetClipPlaneCookie { 3132 c.ExtLock.RLock() 3133 defer c.ExtLock.RUnlock() 3134 if _, ok := c.Extensions["GLX"]; !ok { 3135 panic("Cannot issue request 'GetClipPlane' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3136 } 3137 cookie := c.NewCookie(false, true) 3138 c.NewRequest(getClipPlaneRequest(c, ContextTag, Plane), cookie) 3139 return GetClipPlaneCookie{cookie} 3140 } 3141 3142 // GetClipPlaneReply represents the data returned from a GetClipPlane request. 3143 type GetClipPlaneReply struct { 3144 Sequence uint16 // sequence number of the request for this reply 3145 Length uint32 // number of bytes in this reply 3146 // padding: 1 bytes 3147 // padding: 24 bytes 3148 Data []Float64 // size: xgb.Pad(((int(Length) / 2) * 8)) 3149 } 3150 3151 // Reply blocks and returns the reply data for a GetClipPlane request. 3152 func (cook GetClipPlaneCookie) Reply() (*GetClipPlaneReply, error) { 3153 buf, err := cook.Cookie.Reply() 3154 if err != nil { 3155 return nil, err 3156 } 3157 if buf == nil { 3158 return nil, nil 3159 } 3160 return getClipPlaneReply(buf), nil 3161 } 3162 3163 // getClipPlaneReply reads a byte slice into a GetClipPlaneReply value. 3164 func getClipPlaneReply(buf []byte) *GetClipPlaneReply { 3165 v := new(GetClipPlaneReply) 3166 b := 1 // skip reply determinant 3167 3168 b += 1 // padding 3169 3170 v.Sequence = xgb.Get16(buf[b:]) 3171 b += 2 3172 3173 v.Length = xgb.Get32(buf[b:]) // 4-byte units 3174 b += 4 3175 3176 b += 24 // padding 3177 3178 v.Data = make([]Float64, (int(v.Length) / 2)) 3179 for i := 0; i < int((int(v.Length) / 2)); i++ { 3180 v.Data[i] = Float64(xgb.Get64(buf[b:])) 3181 b += 8 3182 } 3183 3184 return v 3185 } 3186 3187 // Write request to wire for GetClipPlane 3188 // getClipPlaneRequest writes a GetClipPlane request to a byte slice. 3189 func getClipPlaneRequest(c *xgb.Conn, ContextTag ContextTag, Plane int32) []byte { 3190 size := 12 3191 b := 0 3192 buf := make([]byte, size) 3193 3194 c.ExtLock.RLock() 3195 buf[b] = c.Extensions["GLX"] 3196 c.ExtLock.RUnlock() 3197 b += 1 3198 3199 buf[b] = 113 // request opcode 3200 b += 1 3201 3202 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 3203 b += 2 3204 3205 xgb.Put32(buf[b:], uint32(ContextTag)) 3206 b += 4 3207 3208 xgb.Put32(buf[b:], uint32(Plane)) 3209 b += 4 3210 3211 return buf 3212 } 3213 3214 // GetColorTableCookie is a cookie used only for GetColorTable requests. 3215 type GetColorTableCookie struct { 3216 *xgb.Cookie 3217 } 3218 3219 // GetColorTable sends a checked request. 3220 // If an error occurs, it will be returned with the reply by calling GetColorTableCookie.Reply() 3221 func GetColorTable(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool) GetColorTableCookie { 3222 c.ExtLock.RLock() 3223 defer c.ExtLock.RUnlock() 3224 if _, ok := c.Extensions["GLX"]; !ok { 3225 panic("Cannot issue request 'GetColorTable' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3226 } 3227 cookie := c.NewCookie(true, true) 3228 c.NewRequest(getColorTableRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie) 3229 return GetColorTableCookie{cookie} 3230 } 3231 3232 // GetColorTableUnchecked sends an unchecked request. 3233 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 3234 func GetColorTableUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool) GetColorTableCookie { 3235 c.ExtLock.RLock() 3236 defer c.ExtLock.RUnlock() 3237 if _, ok := c.Extensions["GLX"]; !ok { 3238 panic("Cannot issue request 'GetColorTable' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3239 } 3240 cookie := c.NewCookie(false, true) 3241 c.NewRequest(getColorTableRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie) 3242 return GetColorTableCookie{cookie} 3243 } 3244 3245 // GetColorTableReply represents the data returned from a GetColorTable request. 3246 type GetColorTableReply struct { 3247 Sequence uint16 // sequence number of the request for this reply 3248 Length uint32 // number of bytes in this reply 3249 // padding: 1 bytes 3250 // padding: 8 bytes 3251 Width int32 3252 // padding: 12 bytes 3253 Data []byte // size: xgb.Pad(((int(Length) * 4) * 1)) 3254 } 3255 3256 // Reply blocks and returns the reply data for a GetColorTable request. 3257 func (cook GetColorTableCookie) Reply() (*GetColorTableReply, error) { 3258 buf, err := cook.Cookie.Reply() 3259 if err != nil { 3260 return nil, err 3261 } 3262 if buf == nil { 3263 return nil, nil 3264 } 3265 return getColorTableReply(buf), nil 3266 } 3267 3268 // getColorTableReply reads a byte slice into a GetColorTableReply value. 3269 func getColorTableReply(buf []byte) *GetColorTableReply { 3270 v := new(GetColorTableReply) 3271 b := 1 // skip reply determinant 3272 3273 b += 1 // padding 3274 3275 v.Sequence = xgb.Get16(buf[b:]) 3276 b += 2 3277 3278 v.Length = xgb.Get32(buf[b:]) // 4-byte units 3279 b += 4 3280 3281 b += 8 // padding 3282 3283 v.Width = int32(xgb.Get32(buf[b:])) 3284 b += 4 3285 3286 b += 12 // padding 3287 3288 v.Data = make([]byte, (int(v.Length) * 4)) 3289 copy(v.Data[:(int(v.Length)*4)], buf[b:]) 3290 b += int((int(v.Length) * 4)) 3291 3292 return v 3293 } 3294 3295 // Write request to wire for GetColorTable 3296 // getColorTableRequest writes a GetColorTable request to a byte slice. 3297 func getColorTableRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool) []byte { 3298 size := 24 3299 b := 0 3300 buf := make([]byte, size) 3301 3302 c.ExtLock.RLock() 3303 buf[b] = c.Extensions["GLX"] 3304 c.ExtLock.RUnlock() 3305 b += 1 3306 3307 buf[b] = 147 // request opcode 3308 b += 1 3309 3310 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 3311 b += 2 3312 3313 xgb.Put32(buf[b:], uint32(ContextTag)) 3314 b += 4 3315 3316 xgb.Put32(buf[b:], Target) 3317 b += 4 3318 3319 xgb.Put32(buf[b:], Format) 3320 b += 4 3321 3322 xgb.Put32(buf[b:], Type) 3323 b += 4 3324 3325 if SwapBytes { 3326 buf[b] = 1 3327 } else { 3328 buf[b] = 0 3329 } 3330 b += 1 3331 3332 return buf 3333 } 3334 3335 // GetColorTableParameterfvCookie is a cookie used only for GetColorTableParameterfv requests. 3336 type GetColorTableParameterfvCookie struct { 3337 *xgb.Cookie 3338 } 3339 3340 // GetColorTableParameterfv sends a checked request. 3341 // If an error occurs, it will be returned with the reply by calling GetColorTableParameterfvCookie.Reply() 3342 func GetColorTableParameterfv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetColorTableParameterfvCookie { 3343 c.ExtLock.RLock() 3344 defer c.ExtLock.RUnlock() 3345 if _, ok := c.Extensions["GLX"]; !ok { 3346 panic("Cannot issue request 'GetColorTableParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3347 } 3348 cookie := c.NewCookie(true, true) 3349 c.NewRequest(getColorTableParameterfvRequest(c, ContextTag, Target, Pname), cookie) 3350 return GetColorTableParameterfvCookie{cookie} 3351 } 3352 3353 // GetColorTableParameterfvUnchecked sends an unchecked request. 3354 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 3355 func GetColorTableParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetColorTableParameterfvCookie { 3356 c.ExtLock.RLock() 3357 defer c.ExtLock.RUnlock() 3358 if _, ok := c.Extensions["GLX"]; !ok { 3359 panic("Cannot issue request 'GetColorTableParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3360 } 3361 cookie := c.NewCookie(false, true) 3362 c.NewRequest(getColorTableParameterfvRequest(c, ContextTag, Target, Pname), cookie) 3363 return GetColorTableParameterfvCookie{cookie} 3364 } 3365 3366 // GetColorTableParameterfvReply represents the data returned from a GetColorTableParameterfv request. 3367 type GetColorTableParameterfvReply struct { 3368 Sequence uint16 // sequence number of the request for this reply 3369 Length uint32 // number of bytes in this reply 3370 // padding: 1 bytes 3371 // padding: 4 bytes 3372 N uint32 3373 Datum Float32 3374 // padding: 12 bytes 3375 Data []Float32 // size: xgb.Pad((int(N) * 4)) 3376 } 3377 3378 // Reply blocks and returns the reply data for a GetColorTableParameterfv request. 3379 func (cook GetColorTableParameterfvCookie) Reply() (*GetColorTableParameterfvReply, error) { 3380 buf, err := cook.Cookie.Reply() 3381 if err != nil { 3382 return nil, err 3383 } 3384 if buf == nil { 3385 return nil, nil 3386 } 3387 return getColorTableParameterfvReply(buf), nil 3388 } 3389 3390 // getColorTableParameterfvReply reads a byte slice into a GetColorTableParameterfvReply value. 3391 func getColorTableParameterfvReply(buf []byte) *GetColorTableParameterfvReply { 3392 v := new(GetColorTableParameterfvReply) 3393 b := 1 // skip reply determinant 3394 3395 b += 1 // padding 3396 3397 v.Sequence = xgb.Get16(buf[b:]) 3398 b += 2 3399 3400 v.Length = xgb.Get32(buf[b:]) // 4-byte units 3401 b += 4 3402 3403 b += 4 // padding 3404 3405 v.N = xgb.Get32(buf[b:]) 3406 b += 4 3407 3408 v.Datum = Float32(xgb.Get32(buf[b:])) 3409 b += 4 3410 3411 b += 12 // padding 3412 3413 v.Data = make([]Float32, v.N) 3414 for i := 0; i < int(v.N); i++ { 3415 v.Data[i] = Float32(xgb.Get32(buf[b:])) 3416 b += 4 3417 } 3418 3419 return v 3420 } 3421 3422 // Write request to wire for GetColorTableParameterfv 3423 // getColorTableParameterfvRequest writes a GetColorTableParameterfv request to a byte slice. 3424 func getColorTableParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 3425 size := 16 3426 b := 0 3427 buf := make([]byte, size) 3428 3429 c.ExtLock.RLock() 3430 buf[b] = c.Extensions["GLX"] 3431 c.ExtLock.RUnlock() 3432 b += 1 3433 3434 buf[b] = 148 // request opcode 3435 b += 1 3436 3437 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 3438 b += 2 3439 3440 xgb.Put32(buf[b:], uint32(ContextTag)) 3441 b += 4 3442 3443 xgb.Put32(buf[b:], Target) 3444 b += 4 3445 3446 xgb.Put32(buf[b:], Pname) 3447 b += 4 3448 3449 return buf 3450 } 3451 3452 // GetColorTableParameterivCookie is a cookie used only for GetColorTableParameteriv requests. 3453 type GetColorTableParameterivCookie struct { 3454 *xgb.Cookie 3455 } 3456 3457 // GetColorTableParameteriv sends a checked request. 3458 // If an error occurs, it will be returned with the reply by calling GetColorTableParameterivCookie.Reply() 3459 func GetColorTableParameteriv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetColorTableParameterivCookie { 3460 c.ExtLock.RLock() 3461 defer c.ExtLock.RUnlock() 3462 if _, ok := c.Extensions["GLX"]; !ok { 3463 panic("Cannot issue request 'GetColorTableParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3464 } 3465 cookie := c.NewCookie(true, true) 3466 c.NewRequest(getColorTableParameterivRequest(c, ContextTag, Target, Pname), cookie) 3467 return GetColorTableParameterivCookie{cookie} 3468 } 3469 3470 // GetColorTableParameterivUnchecked sends an unchecked request. 3471 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 3472 func GetColorTableParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetColorTableParameterivCookie { 3473 c.ExtLock.RLock() 3474 defer c.ExtLock.RUnlock() 3475 if _, ok := c.Extensions["GLX"]; !ok { 3476 panic("Cannot issue request 'GetColorTableParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3477 } 3478 cookie := c.NewCookie(false, true) 3479 c.NewRequest(getColorTableParameterivRequest(c, ContextTag, Target, Pname), cookie) 3480 return GetColorTableParameterivCookie{cookie} 3481 } 3482 3483 // GetColorTableParameterivReply represents the data returned from a GetColorTableParameteriv request. 3484 type GetColorTableParameterivReply struct { 3485 Sequence uint16 // sequence number of the request for this reply 3486 Length uint32 // number of bytes in this reply 3487 // padding: 1 bytes 3488 // padding: 4 bytes 3489 N uint32 3490 Datum int32 3491 // padding: 12 bytes 3492 Data []int32 // size: xgb.Pad((int(N) * 4)) 3493 } 3494 3495 // Reply blocks and returns the reply data for a GetColorTableParameteriv request. 3496 func (cook GetColorTableParameterivCookie) Reply() (*GetColorTableParameterivReply, error) { 3497 buf, err := cook.Cookie.Reply() 3498 if err != nil { 3499 return nil, err 3500 } 3501 if buf == nil { 3502 return nil, nil 3503 } 3504 return getColorTableParameterivReply(buf), nil 3505 } 3506 3507 // getColorTableParameterivReply reads a byte slice into a GetColorTableParameterivReply value. 3508 func getColorTableParameterivReply(buf []byte) *GetColorTableParameterivReply { 3509 v := new(GetColorTableParameterivReply) 3510 b := 1 // skip reply determinant 3511 3512 b += 1 // padding 3513 3514 v.Sequence = xgb.Get16(buf[b:]) 3515 b += 2 3516 3517 v.Length = xgb.Get32(buf[b:]) // 4-byte units 3518 b += 4 3519 3520 b += 4 // padding 3521 3522 v.N = xgb.Get32(buf[b:]) 3523 b += 4 3524 3525 v.Datum = int32(xgb.Get32(buf[b:])) 3526 b += 4 3527 3528 b += 12 // padding 3529 3530 v.Data = make([]int32, v.N) 3531 for i := 0; i < int(v.N); i++ { 3532 v.Data[i] = int32(xgb.Get32(buf[b:])) 3533 b += 4 3534 } 3535 3536 return v 3537 } 3538 3539 // Write request to wire for GetColorTableParameteriv 3540 // getColorTableParameterivRequest writes a GetColorTableParameteriv request to a byte slice. 3541 func getColorTableParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 3542 size := 16 3543 b := 0 3544 buf := make([]byte, size) 3545 3546 c.ExtLock.RLock() 3547 buf[b] = c.Extensions["GLX"] 3548 c.ExtLock.RUnlock() 3549 b += 1 3550 3551 buf[b] = 149 // request opcode 3552 b += 1 3553 3554 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 3555 b += 2 3556 3557 xgb.Put32(buf[b:], uint32(ContextTag)) 3558 b += 4 3559 3560 xgb.Put32(buf[b:], Target) 3561 b += 4 3562 3563 xgb.Put32(buf[b:], Pname) 3564 b += 4 3565 3566 return buf 3567 } 3568 3569 // GetCompressedTexImageARBCookie is a cookie used only for GetCompressedTexImageARB requests. 3570 type GetCompressedTexImageARBCookie struct { 3571 *xgb.Cookie 3572 } 3573 3574 // GetCompressedTexImageARB sends a checked request. 3575 // If an error occurs, it will be returned with the reply by calling GetCompressedTexImageARBCookie.Reply() 3576 func GetCompressedTexImageARB(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32) GetCompressedTexImageARBCookie { 3577 c.ExtLock.RLock() 3578 defer c.ExtLock.RUnlock() 3579 if _, ok := c.Extensions["GLX"]; !ok { 3580 panic("Cannot issue request 'GetCompressedTexImageARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3581 } 3582 cookie := c.NewCookie(true, true) 3583 c.NewRequest(getCompressedTexImageARBRequest(c, ContextTag, Target, Level), cookie) 3584 return GetCompressedTexImageARBCookie{cookie} 3585 } 3586 3587 // GetCompressedTexImageARBUnchecked sends an unchecked request. 3588 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 3589 func GetCompressedTexImageARBUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32) GetCompressedTexImageARBCookie { 3590 c.ExtLock.RLock() 3591 defer c.ExtLock.RUnlock() 3592 if _, ok := c.Extensions["GLX"]; !ok { 3593 panic("Cannot issue request 'GetCompressedTexImageARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3594 } 3595 cookie := c.NewCookie(false, true) 3596 c.NewRequest(getCompressedTexImageARBRequest(c, ContextTag, Target, Level), cookie) 3597 return GetCompressedTexImageARBCookie{cookie} 3598 } 3599 3600 // GetCompressedTexImageARBReply represents the data returned from a GetCompressedTexImageARB request. 3601 type GetCompressedTexImageARBReply struct { 3602 Sequence uint16 // sequence number of the request for this reply 3603 Length uint32 // number of bytes in this reply 3604 // padding: 1 bytes 3605 // padding: 8 bytes 3606 Size int32 3607 // padding: 12 bytes 3608 Data []byte // size: xgb.Pad(((int(Length) * 4) * 1)) 3609 } 3610 3611 // Reply blocks and returns the reply data for a GetCompressedTexImageARB request. 3612 func (cook GetCompressedTexImageARBCookie) Reply() (*GetCompressedTexImageARBReply, error) { 3613 buf, err := cook.Cookie.Reply() 3614 if err != nil { 3615 return nil, err 3616 } 3617 if buf == nil { 3618 return nil, nil 3619 } 3620 return getCompressedTexImageARBReply(buf), nil 3621 } 3622 3623 // getCompressedTexImageARBReply reads a byte slice into a GetCompressedTexImageARBReply value. 3624 func getCompressedTexImageARBReply(buf []byte) *GetCompressedTexImageARBReply { 3625 v := new(GetCompressedTexImageARBReply) 3626 b := 1 // skip reply determinant 3627 3628 b += 1 // padding 3629 3630 v.Sequence = xgb.Get16(buf[b:]) 3631 b += 2 3632 3633 v.Length = xgb.Get32(buf[b:]) // 4-byte units 3634 b += 4 3635 3636 b += 8 // padding 3637 3638 v.Size = int32(xgb.Get32(buf[b:])) 3639 b += 4 3640 3641 b += 12 // padding 3642 3643 v.Data = make([]byte, (int(v.Length) * 4)) 3644 copy(v.Data[:(int(v.Length)*4)], buf[b:]) 3645 b += int((int(v.Length) * 4)) 3646 3647 return v 3648 } 3649 3650 // Write request to wire for GetCompressedTexImageARB 3651 // getCompressedTexImageARBRequest writes a GetCompressedTexImageARB request to a byte slice. 3652 func getCompressedTexImageARBRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32) []byte { 3653 size := 16 3654 b := 0 3655 buf := make([]byte, size) 3656 3657 c.ExtLock.RLock() 3658 buf[b] = c.Extensions["GLX"] 3659 c.ExtLock.RUnlock() 3660 b += 1 3661 3662 buf[b] = 160 // request opcode 3663 b += 1 3664 3665 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 3666 b += 2 3667 3668 xgb.Put32(buf[b:], uint32(ContextTag)) 3669 b += 4 3670 3671 xgb.Put32(buf[b:], Target) 3672 b += 4 3673 3674 xgb.Put32(buf[b:], uint32(Level)) 3675 b += 4 3676 3677 return buf 3678 } 3679 3680 // GetConvolutionFilterCookie is a cookie used only for GetConvolutionFilter requests. 3681 type GetConvolutionFilterCookie struct { 3682 *xgb.Cookie 3683 } 3684 3685 // GetConvolutionFilter sends a checked request. 3686 // If an error occurs, it will be returned with the reply by calling GetConvolutionFilterCookie.Reply() 3687 func GetConvolutionFilter(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool) GetConvolutionFilterCookie { 3688 c.ExtLock.RLock() 3689 defer c.ExtLock.RUnlock() 3690 if _, ok := c.Extensions["GLX"]; !ok { 3691 panic("Cannot issue request 'GetConvolutionFilter' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3692 } 3693 cookie := c.NewCookie(true, true) 3694 c.NewRequest(getConvolutionFilterRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie) 3695 return GetConvolutionFilterCookie{cookie} 3696 } 3697 3698 // GetConvolutionFilterUnchecked sends an unchecked request. 3699 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 3700 func GetConvolutionFilterUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool) GetConvolutionFilterCookie { 3701 c.ExtLock.RLock() 3702 defer c.ExtLock.RUnlock() 3703 if _, ok := c.Extensions["GLX"]; !ok { 3704 panic("Cannot issue request 'GetConvolutionFilter' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3705 } 3706 cookie := c.NewCookie(false, true) 3707 c.NewRequest(getConvolutionFilterRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie) 3708 return GetConvolutionFilterCookie{cookie} 3709 } 3710 3711 // GetConvolutionFilterReply represents the data returned from a GetConvolutionFilter request. 3712 type GetConvolutionFilterReply struct { 3713 Sequence uint16 // sequence number of the request for this reply 3714 Length uint32 // number of bytes in this reply 3715 // padding: 1 bytes 3716 // padding: 8 bytes 3717 Width int32 3718 Height int32 3719 // padding: 8 bytes 3720 Data []byte // size: xgb.Pad(((int(Length) * 4) * 1)) 3721 } 3722 3723 // Reply blocks and returns the reply data for a GetConvolutionFilter request. 3724 func (cook GetConvolutionFilterCookie) Reply() (*GetConvolutionFilterReply, error) { 3725 buf, err := cook.Cookie.Reply() 3726 if err != nil { 3727 return nil, err 3728 } 3729 if buf == nil { 3730 return nil, nil 3731 } 3732 return getConvolutionFilterReply(buf), nil 3733 } 3734 3735 // getConvolutionFilterReply reads a byte slice into a GetConvolutionFilterReply value. 3736 func getConvolutionFilterReply(buf []byte) *GetConvolutionFilterReply { 3737 v := new(GetConvolutionFilterReply) 3738 b := 1 // skip reply determinant 3739 3740 b += 1 // padding 3741 3742 v.Sequence = xgb.Get16(buf[b:]) 3743 b += 2 3744 3745 v.Length = xgb.Get32(buf[b:]) // 4-byte units 3746 b += 4 3747 3748 b += 8 // padding 3749 3750 v.Width = int32(xgb.Get32(buf[b:])) 3751 b += 4 3752 3753 v.Height = int32(xgb.Get32(buf[b:])) 3754 b += 4 3755 3756 b += 8 // padding 3757 3758 v.Data = make([]byte, (int(v.Length) * 4)) 3759 copy(v.Data[:(int(v.Length)*4)], buf[b:]) 3760 b += int((int(v.Length) * 4)) 3761 3762 return v 3763 } 3764 3765 // Write request to wire for GetConvolutionFilter 3766 // getConvolutionFilterRequest writes a GetConvolutionFilter request to a byte slice. 3767 func getConvolutionFilterRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool) []byte { 3768 size := 24 3769 b := 0 3770 buf := make([]byte, size) 3771 3772 c.ExtLock.RLock() 3773 buf[b] = c.Extensions["GLX"] 3774 c.ExtLock.RUnlock() 3775 b += 1 3776 3777 buf[b] = 150 // request opcode 3778 b += 1 3779 3780 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 3781 b += 2 3782 3783 xgb.Put32(buf[b:], uint32(ContextTag)) 3784 b += 4 3785 3786 xgb.Put32(buf[b:], Target) 3787 b += 4 3788 3789 xgb.Put32(buf[b:], Format) 3790 b += 4 3791 3792 xgb.Put32(buf[b:], Type) 3793 b += 4 3794 3795 if SwapBytes { 3796 buf[b] = 1 3797 } else { 3798 buf[b] = 0 3799 } 3800 b += 1 3801 3802 return buf 3803 } 3804 3805 // GetConvolutionParameterfvCookie is a cookie used only for GetConvolutionParameterfv requests. 3806 type GetConvolutionParameterfvCookie struct { 3807 *xgb.Cookie 3808 } 3809 3810 // GetConvolutionParameterfv sends a checked request. 3811 // If an error occurs, it will be returned with the reply by calling GetConvolutionParameterfvCookie.Reply() 3812 func GetConvolutionParameterfv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetConvolutionParameterfvCookie { 3813 c.ExtLock.RLock() 3814 defer c.ExtLock.RUnlock() 3815 if _, ok := c.Extensions["GLX"]; !ok { 3816 panic("Cannot issue request 'GetConvolutionParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3817 } 3818 cookie := c.NewCookie(true, true) 3819 c.NewRequest(getConvolutionParameterfvRequest(c, ContextTag, Target, Pname), cookie) 3820 return GetConvolutionParameterfvCookie{cookie} 3821 } 3822 3823 // GetConvolutionParameterfvUnchecked sends an unchecked request. 3824 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 3825 func GetConvolutionParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetConvolutionParameterfvCookie { 3826 c.ExtLock.RLock() 3827 defer c.ExtLock.RUnlock() 3828 if _, ok := c.Extensions["GLX"]; !ok { 3829 panic("Cannot issue request 'GetConvolutionParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3830 } 3831 cookie := c.NewCookie(false, true) 3832 c.NewRequest(getConvolutionParameterfvRequest(c, ContextTag, Target, Pname), cookie) 3833 return GetConvolutionParameterfvCookie{cookie} 3834 } 3835 3836 // GetConvolutionParameterfvReply represents the data returned from a GetConvolutionParameterfv request. 3837 type GetConvolutionParameterfvReply struct { 3838 Sequence uint16 // sequence number of the request for this reply 3839 Length uint32 // number of bytes in this reply 3840 // padding: 1 bytes 3841 // padding: 4 bytes 3842 N uint32 3843 Datum Float32 3844 // padding: 12 bytes 3845 Data []Float32 // size: xgb.Pad((int(N) * 4)) 3846 } 3847 3848 // Reply blocks and returns the reply data for a GetConvolutionParameterfv request. 3849 func (cook GetConvolutionParameterfvCookie) Reply() (*GetConvolutionParameterfvReply, error) { 3850 buf, err := cook.Cookie.Reply() 3851 if err != nil { 3852 return nil, err 3853 } 3854 if buf == nil { 3855 return nil, nil 3856 } 3857 return getConvolutionParameterfvReply(buf), nil 3858 } 3859 3860 // getConvolutionParameterfvReply reads a byte slice into a GetConvolutionParameterfvReply value. 3861 func getConvolutionParameterfvReply(buf []byte) *GetConvolutionParameterfvReply { 3862 v := new(GetConvolutionParameterfvReply) 3863 b := 1 // skip reply determinant 3864 3865 b += 1 // padding 3866 3867 v.Sequence = xgb.Get16(buf[b:]) 3868 b += 2 3869 3870 v.Length = xgb.Get32(buf[b:]) // 4-byte units 3871 b += 4 3872 3873 b += 4 // padding 3874 3875 v.N = xgb.Get32(buf[b:]) 3876 b += 4 3877 3878 v.Datum = Float32(xgb.Get32(buf[b:])) 3879 b += 4 3880 3881 b += 12 // padding 3882 3883 v.Data = make([]Float32, v.N) 3884 for i := 0; i < int(v.N); i++ { 3885 v.Data[i] = Float32(xgb.Get32(buf[b:])) 3886 b += 4 3887 } 3888 3889 return v 3890 } 3891 3892 // Write request to wire for GetConvolutionParameterfv 3893 // getConvolutionParameterfvRequest writes a GetConvolutionParameterfv request to a byte slice. 3894 func getConvolutionParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 3895 size := 16 3896 b := 0 3897 buf := make([]byte, size) 3898 3899 c.ExtLock.RLock() 3900 buf[b] = c.Extensions["GLX"] 3901 c.ExtLock.RUnlock() 3902 b += 1 3903 3904 buf[b] = 151 // request opcode 3905 b += 1 3906 3907 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 3908 b += 2 3909 3910 xgb.Put32(buf[b:], uint32(ContextTag)) 3911 b += 4 3912 3913 xgb.Put32(buf[b:], Target) 3914 b += 4 3915 3916 xgb.Put32(buf[b:], Pname) 3917 b += 4 3918 3919 return buf 3920 } 3921 3922 // GetConvolutionParameterivCookie is a cookie used only for GetConvolutionParameteriv requests. 3923 type GetConvolutionParameterivCookie struct { 3924 *xgb.Cookie 3925 } 3926 3927 // GetConvolutionParameteriv sends a checked request. 3928 // If an error occurs, it will be returned with the reply by calling GetConvolutionParameterivCookie.Reply() 3929 func GetConvolutionParameteriv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetConvolutionParameterivCookie { 3930 c.ExtLock.RLock() 3931 defer c.ExtLock.RUnlock() 3932 if _, ok := c.Extensions["GLX"]; !ok { 3933 panic("Cannot issue request 'GetConvolutionParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3934 } 3935 cookie := c.NewCookie(true, true) 3936 c.NewRequest(getConvolutionParameterivRequest(c, ContextTag, Target, Pname), cookie) 3937 return GetConvolutionParameterivCookie{cookie} 3938 } 3939 3940 // GetConvolutionParameterivUnchecked sends an unchecked request. 3941 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 3942 func GetConvolutionParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetConvolutionParameterivCookie { 3943 c.ExtLock.RLock() 3944 defer c.ExtLock.RUnlock() 3945 if _, ok := c.Extensions["GLX"]; !ok { 3946 panic("Cannot issue request 'GetConvolutionParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 3947 } 3948 cookie := c.NewCookie(false, true) 3949 c.NewRequest(getConvolutionParameterivRequest(c, ContextTag, Target, Pname), cookie) 3950 return GetConvolutionParameterivCookie{cookie} 3951 } 3952 3953 // GetConvolutionParameterivReply represents the data returned from a GetConvolutionParameteriv request. 3954 type GetConvolutionParameterivReply struct { 3955 Sequence uint16 // sequence number of the request for this reply 3956 Length uint32 // number of bytes in this reply 3957 // padding: 1 bytes 3958 // padding: 4 bytes 3959 N uint32 3960 Datum int32 3961 // padding: 12 bytes 3962 Data []int32 // size: xgb.Pad((int(N) * 4)) 3963 } 3964 3965 // Reply blocks and returns the reply data for a GetConvolutionParameteriv request. 3966 func (cook GetConvolutionParameterivCookie) Reply() (*GetConvolutionParameterivReply, error) { 3967 buf, err := cook.Cookie.Reply() 3968 if err != nil { 3969 return nil, err 3970 } 3971 if buf == nil { 3972 return nil, nil 3973 } 3974 return getConvolutionParameterivReply(buf), nil 3975 } 3976 3977 // getConvolutionParameterivReply reads a byte slice into a GetConvolutionParameterivReply value. 3978 func getConvolutionParameterivReply(buf []byte) *GetConvolutionParameterivReply { 3979 v := new(GetConvolutionParameterivReply) 3980 b := 1 // skip reply determinant 3981 3982 b += 1 // padding 3983 3984 v.Sequence = xgb.Get16(buf[b:]) 3985 b += 2 3986 3987 v.Length = xgb.Get32(buf[b:]) // 4-byte units 3988 b += 4 3989 3990 b += 4 // padding 3991 3992 v.N = xgb.Get32(buf[b:]) 3993 b += 4 3994 3995 v.Datum = int32(xgb.Get32(buf[b:])) 3996 b += 4 3997 3998 b += 12 // padding 3999 4000 v.Data = make([]int32, v.N) 4001 for i := 0; i < int(v.N); i++ { 4002 v.Data[i] = int32(xgb.Get32(buf[b:])) 4003 b += 4 4004 } 4005 4006 return v 4007 } 4008 4009 // Write request to wire for GetConvolutionParameteriv 4010 // getConvolutionParameterivRequest writes a GetConvolutionParameteriv request to a byte slice. 4011 func getConvolutionParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 4012 size := 16 4013 b := 0 4014 buf := make([]byte, size) 4015 4016 c.ExtLock.RLock() 4017 buf[b] = c.Extensions["GLX"] 4018 c.ExtLock.RUnlock() 4019 b += 1 4020 4021 buf[b] = 152 // request opcode 4022 b += 1 4023 4024 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 4025 b += 2 4026 4027 xgb.Put32(buf[b:], uint32(ContextTag)) 4028 b += 4 4029 4030 xgb.Put32(buf[b:], Target) 4031 b += 4 4032 4033 xgb.Put32(buf[b:], Pname) 4034 b += 4 4035 4036 return buf 4037 } 4038 4039 // GetDoublevCookie is a cookie used only for GetDoublev requests. 4040 type GetDoublevCookie struct { 4041 *xgb.Cookie 4042 } 4043 4044 // GetDoublev sends a checked request. 4045 // If an error occurs, it will be returned with the reply by calling GetDoublevCookie.Reply() 4046 func GetDoublev(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetDoublevCookie { 4047 c.ExtLock.RLock() 4048 defer c.ExtLock.RUnlock() 4049 if _, ok := c.Extensions["GLX"]; !ok { 4050 panic("Cannot issue request 'GetDoublev' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4051 } 4052 cookie := c.NewCookie(true, true) 4053 c.NewRequest(getDoublevRequest(c, ContextTag, Pname), cookie) 4054 return GetDoublevCookie{cookie} 4055 } 4056 4057 // GetDoublevUnchecked sends an unchecked request. 4058 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 4059 func GetDoublevUnchecked(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetDoublevCookie { 4060 c.ExtLock.RLock() 4061 defer c.ExtLock.RUnlock() 4062 if _, ok := c.Extensions["GLX"]; !ok { 4063 panic("Cannot issue request 'GetDoublev' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4064 } 4065 cookie := c.NewCookie(false, true) 4066 c.NewRequest(getDoublevRequest(c, ContextTag, Pname), cookie) 4067 return GetDoublevCookie{cookie} 4068 } 4069 4070 // GetDoublevReply represents the data returned from a GetDoublev request. 4071 type GetDoublevReply struct { 4072 Sequence uint16 // sequence number of the request for this reply 4073 Length uint32 // number of bytes in this reply 4074 // padding: 1 bytes 4075 // padding: 4 bytes 4076 N uint32 4077 Datum Float64 4078 // padding: 8 bytes 4079 Data []Float64 // size: xgb.Pad((int(N) * 8)) 4080 } 4081 4082 // Reply blocks and returns the reply data for a GetDoublev request. 4083 func (cook GetDoublevCookie) Reply() (*GetDoublevReply, error) { 4084 buf, err := cook.Cookie.Reply() 4085 if err != nil { 4086 return nil, err 4087 } 4088 if buf == nil { 4089 return nil, nil 4090 } 4091 return getDoublevReply(buf), nil 4092 } 4093 4094 // getDoublevReply reads a byte slice into a GetDoublevReply value. 4095 func getDoublevReply(buf []byte) *GetDoublevReply { 4096 v := new(GetDoublevReply) 4097 b := 1 // skip reply determinant 4098 4099 b += 1 // padding 4100 4101 v.Sequence = xgb.Get16(buf[b:]) 4102 b += 2 4103 4104 v.Length = xgb.Get32(buf[b:]) // 4-byte units 4105 b += 4 4106 4107 b += 4 // padding 4108 4109 v.N = xgb.Get32(buf[b:]) 4110 b += 4 4111 4112 v.Datum = Float64(xgb.Get64(buf[b:])) 4113 b += 8 4114 4115 b += 8 // padding 4116 4117 v.Data = make([]Float64, v.N) 4118 for i := 0; i < int(v.N); i++ { 4119 v.Data[i] = Float64(xgb.Get64(buf[b:])) 4120 b += 8 4121 } 4122 4123 return v 4124 } 4125 4126 // Write request to wire for GetDoublev 4127 // getDoublevRequest writes a GetDoublev request to a byte slice. 4128 func getDoublevRequest(c *xgb.Conn, ContextTag ContextTag, Pname uint32) []byte { 4129 size := 12 4130 b := 0 4131 buf := make([]byte, size) 4132 4133 c.ExtLock.RLock() 4134 buf[b] = c.Extensions["GLX"] 4135 c.ExtLock.RUnlock() 4136 b += 1 4137 4138 buf[b] = 114 // request opcode 4139 b += 1 4140 4141 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 4142 b += 2 4143 4144 xgb.Put32(buf[b:], uint32(ContextTag)) 4145 b += 4 4146 4147 xgb.Put32(buf[b:], Pname) 4148 b += 4 4149 4150 return buf 4151 } 4152 4153 // GetDrawableAttributesCookie is a cookie used only for GetDrawableAttributes requests. 4154 type GetDrawableAttributesCookie struct { 4155 *xgb.Cookie 4156 } 4157 4158 // GetDrawableAttributes sends a checked request. 4159 // If an error occurs, it will be returned with the reply by calling GetDrawableAttributesCookie.Reply() 4160 func GetDrawableAttributes(c *xgb.Conn, Drawable Drawable) GetDrawableAttributesCookie { 4161 c.ExtLock.RLock() 4162 defer c.ExtLock.RUnlock() 4163 if _, ok := c.Extensions["GLX"]; !ok { 4164 panic("Cannot issue request 'GetDrawableAttributes' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4165 } 4166 cookie := c.NewCookie(true, true) 4167 c.NewRequest(getDrawableAttributesRequest(c, Drawable), cookie) 4168 return GetDrawableAttributesCookie{cookie} 4169 } 4170 4171 // GetDrawableAttributesUnchecked sends an unchecked request. 4172 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 4173 func GetDrawableAttributesUnchecked(c *xgb.Conn, Drawable Drawable) GetDrawableAttributesCookie { 4174 c.ExtLock.RLock() 4175 defer c.ExtLock.RUnlock() 4176 if _, ok := c.Extensions["GLX"]; !ok { 4177 panic("Cannot issue request 'GetDrawableAttributes' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4178 } 4179 cookie := c.NewCookie(false, true) 4180 c.NewRequest(getDrawableAttributesRequest(c, Drawable), cookie) 4181 return GetDrawableAttributesCookie{cookie} 4182 } 4183 4184 // GetDrawableAttributesReply represents the data returned from a GetDrawableAttributes request. 4185 type GetDrawableAttributesReply struct { 4186 Sequence uint16 // sequence number of the request for this reply 4187 Length uint32 // number of bytes in this reply 4188 // padding: 1 bytes 4189 NumAttribs uint32 4190 // padding: 20 bytes 4191 Attribs []uint32 // size: xgb.Pad(((int(NumAttribs) * 2) * 4)) 4192 } 4193 4194 // Reply blocks and returns the reply data for a GetDrawableAttributes request. 4195 func (cook GetDrawableAttributesCookie) Reply() (*GetDrawableAttributesReply, error) { 4196 buf, err := cook.Cookie.Reply() 4197 if err != nil { 4198 return nil, err 4199 } 4200 if buf == nil { 4201 return nil, nil 4202 } 4203 return getDrawableAttributesReply(buf), nil 4204 } 4205 4206 // getDrawableAttributesReply reads a byte slice into a GetDrawableAttributesReply value. 4207 func getDrawableAttributesReply(buf []byte) *GetDrawableAttributesReply { 4208 v := new(GetDrawableAttributesReply) 4209 b := 1 // skip reply determinant 4210 4211 b += 1 // padding 4212 4213 v.Sequence = xgb.Get16(buf[b:]) 4214 b += 2 4215 4216 v.Length = xgb.Get32(buf[b:]) // 4-byte units 4217 b += 4 4218 4219 v.NumAttribs = xgb.Get32(buf[b:]) 4220 b += 4 4221 4222 b += 20 // padding 4223 4224 v.Attribs = make([]uint32, (int(v.NumAttribs) * 2)) 4225 for i := 0; i < int((int(v.NumAttribs) * 2)); i++ { 4226 v.Attribs[i] = xgb.Get32(buf[b:]) 4227 b += 4 4228 } 4229 4230 return v 4231 } 4232 4233 // Write request to wire for GetDrawableAttributes 4234 // getDrawableAttributesRequest writes a GetDrawableAttributes request to a byte slice. 4235 func getDrawableAttributesRequest(c *xgb.Conn, Drawable Drawable) []byte { 4236 size := 8 4237 b := 0 4238 buf := make([]byte, size) 4239 4240 c.ExtLock.RLock() 4241 buf[b] = c.Extensions["GLX"] 4242 c.ExtLock.RUnlock() 4243 b += 1 4244 4245 buf[b] = 29 // request opcode 4246 b += 1 4247 4248 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 4249 b += 2 4250 4251 xgb.Put32(buf[b:], uint32(Drawable)) 4252 b += 4 4253 4254 return buf 4255 } 4256 4257 // GetErrorCookie is a cookie used only for GetError requests. 4258 type GetErrorCookie struct { 4259 *xgb.Cookie 4260 } 4261 4262 // GetError sends a checked request. 4263 // If an error occurs, it will be returned with the reply by calling GetErrorCookie.Reply() 4264 func GetError(c *xgb.Conn, ContextTag ContextTag) GetErrorCookie { 4265 c.ExtLock.RLock() 4266 defer c.ExtLock.RUnlock() 4267 if _, ok := c.Extensions["GLX"]; !ok { 4268 panic("Cannot issue request 'GetError' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4269 } 4270 cookie := c.NewCookie(true, true) 4271 c.NewRequest(getErrorRequest(c, ContextTag), cookie) 4272 return GetErrorCookie{cookie} 4273 } 4274 4275 // GetErrorUnchecked sends an unchecked request. 4276 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 4277 func GetErrorUnchecked(c *xgb.Conn, ContextTag ContextTag) GetErrorCookie { 4278 c.ExtLock.RLock() 4279 defer c.ExtLock.RUnlock() 4280 if _, ok := c.Extensions["GLX"]; !ok { 4281 panic("Cannot issue request 'GetError' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4282 } 4283 cookie := c.NewCookie(false, true) 4284 c.NewRequest(getErrorRequest(c, ContextTag), cookie) 4285 return GetErrorCookie{cookie} 4286 } 4287 4288 // GetErrorReply represents the data returned from a GetError request. 4289 type GetErrorReply struct { 4290 Sequence uint16 // sequence number of the request for this reply 4291 Length uint32 // number of bytes in this reply 4292 // padding: 1 bytes 4293 Error int32 4294 } 4295 4296 // Reply blocks and returns the reply data for a GetError request. 4297 func (cook GetErrorCookie) Reply() (*GetErrorReply, error) { 4298 buf, err := cook.Cookie.Reply() 4299 if err != nil { 4300 return nil, err 4301 } 4302 if buf == nil { 4303 return nil, nil 4304 } 4305 return getErrorReply(buf), nil 4306 } 4307 4308 // getErrorReply reads a byte slice into a GetErrorReply value. 4309 func getErrorReply(buf []byte) *GetErrorReply { 4310 v := new(GetErrorReply) 4311 b := 1 // skip reply determinant 4312 4313 b += 1 // padding 4314 4315 v.Sequence = xgb.Get16(buf[b:]) 4316 b += 2 4317 4318 v.Length = xgb.Get32(buf[b:]) // 4-byte units 4319 b += 4 4320 4321 v.Error = int32(xgb.Get32(buf[b:])) 4322 b += 4 4323 4324 return v 4325 } 4326 4327 // Write request to wire for GetError 4328 // getErrorRequest writes a GetError request to a byte slice. 4329 func getErrorRequest(c *xgb.Conn, ContextTag ContextTag) []byte { 4330 size := 8 4331 b := 0 4332 buf := make([]byte, size) 4333 4334 c.ExtLock.RLock() 4335 buf[b] = c.Extensions["GLX"] 4336 c.ExtLock.RUnlock() 4337 b += 1 4338 4339 buf[b] = 115 // request opcode 4340 b += 1 4341 4342 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 4343 b += 2 4344 4345 xgb.Put32(buf[b:], uint32(ContextTag)) 4346 b += 4 4347 4348 return buf 4349 } 4350 4351 // GetFBConfigsCookie is a cookie used only for GetFBConfigs requests. 4352 type GetFBConfigsCookie struct { 4353 *xgb.Cookie 4354 } 4355 4356 // GetFBConfigs sends a checked request. 4357 // If an error occurs, it will be returned with the reply by calling GetFBConfigsCookie.Reply() 4358 func GetFBConfigs(c *xgb.Conn, Screen uint32) GetFBConfigsCookie { 4359 c.ExtLock.RLock() 4360 defer c.ExtLock.RUnlock() 4361 if _, ok := c.Extensions["GLX"]; !ok { 4362 panic("Cannot issue request 'GetFBConfigs' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4363 } 4364 cookie := c.NewCookie(true, true) 4365 c.NewRequest(getFBConfigsRequest(c, Screen), cookie) 4366 return GetFBConfigsCookie{cookie} 4367 } 4368 4369 // GetFBConfigsUnchecked sends an unchecked request. 4370 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 4371 func GetFBConfigsUnchecked(c *xgb.Conn, Screen uint32) GetFBConfigsCookie { 4372 c.ExtLock.RLock() 4373 defer c.ExtLock.RUnlock() 4374 if _, ok := c.Extensions["GLX"]; !ok { 4375 panic("Cannot issue request 'GetFBConfigs' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4376 } 4377 cookie := c.NewCookie(false, true) 4378 c.NewRequest(getFBConfigsRequest(c, Screen), cookie) 4379 return GetFBConfigsCookie{cookie} 4380 } 4381 4382 // GetFBConfigsReply represents the data returned from a GetFBConfigs request. 4383 type GetFBConfigsReply struct { 4384 Sequence uint16 // sequence number of the request for this reply 4385 Length uint32 // number of bytes in this reply 4386 // padding: 1 bytes 4387 NumFbConfigs uint32 4388 NumProperties uint32 4389 // padding: 16 bytes 4390 PropertyList []uint32 // size: xgb.Pad((int(Length) * 4)) 4391 } 4392 4393 // Reply blocks and returns the reply data for a GetFBConfigs request. 4394 func (cook GetFBConfigsCookie) Reply() (*GetFBConfigsReply, error) { 4395 buf, err := cook.Cookie.Reply() 4396 if err != nil { 4397 return nil, err 4398 } 4399 if buf == nil { 4400 return nil, nil 4401 } 4402 return getFBConfigsReply(buf), nil 4403 } 4404 4405 // getFBConfigsReply reads a byte slice into a GetFBConfigsReply value. 4406 func getFBConfigsReply(buf []byte) *GetFBConfigsReply { 4407 v := new(GetFBConfigsReply) 4408 b := 1 // skip reply determinant 4409 4410 b += 1 // padding 4411 4412 v.Sequence = xgb.Get16(buf[b:]) 4413 b += 2 4414 4415 v.Length = xgb.Get32(buf[b:]) // 4-byte units 4416 b += 4 4417 4418 v.NumFbConfigs = xgb.Get32(buf[b:]) 4419 b += 4 4420 4421 v.NumProperties = xgb.Get32(buf[b:]) 4422 b += 4 4423 4424 b += 16 // padding 4425 4426 v.PropertyList = make([]uint32, v.Length) 4427 for i := 0; i < int(v.Length); i++ { 4428 v.PropertyList[i] = xgb.Get32(buf[b:]) 4429 b += 4 4430 } 4431 4432 return v 4433 } 4434 4435 // Write request to wire for GetFBConfigs 4436 // getFBConfigsRequest writes a GetFBConfigs request to a byte slice. 4437 func getFBConfigsRequest(c *xgb.Conn, Screen uint32) []byte { 4438 size := 8 4439 b := 0 4440 buf := make([]byte, size) 4441 4442 c.ExtLock.RLock() 4443 buf[b] = c.Extensions["GLX"] 4444 c.ExtLock.RUnlock() 4445 b += 1 4446 4447 buf[b] = 21 // request opcode 4448 b += 1 4449 4450 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 4451 b += 2 4452 4453 xgb.Put32(buf[b:], Screen) 4454 b += 4 4455 4456 return buf 4457 } 4458 4459 // GetFloatvCookie is a cookie used only for GetFloatv requests. 4460 type GetFloatvCookie struct { 4461 *xgb.Cookie 4462 } 4463 4464 // GetFloatv sends a checked request. 4465 // If an error occurs, it will be returned with the reply by calling GetFloatvCookie.Reply() 4466 func GetFloatv(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetFloatvCookie { 4467 c.ExtLock.RLock() 4468 defer c.ExtLock.RUnlock() 4469 if _, ok := c.Extensions["GLX"]; !ok { 4470 panic("Cannot issue request 'GetFloatv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4471 } 4472 cookie := c.NewCookie(true, true) 4473 c.NewRequest(getFloatvRequest(c, ContextTag, Pname), cookie) 4474 return GetFloatvCookie{cookie} 4475 } 4476 4477 // GetFloatvUnchecked sends an unchecked request. 4478 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 4479 func GetFloatvUnchecked(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetFloatvCookie { 4480 c.ExtLock.RLock() 4481 defer c.ExtLock.RUnlock() 4482 if _, ok := c.Extensions["GLX"]; !ok { 4483 panic("Cannot issue request 'GetFloatv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4484 } 4485 cookie := c.NewCookie(false, true) 4486 c.NewRequest(getFloatvRequest(c, ContextTag, Pname), cookie) 4487 return GetFloatvCookie{cookie} 4488 } 4489 4490 // GetFloatvReply represents the data returned from a GetFloatv request. 4491 type GetFloatvReply struct { 4492 Sequence uint16 // sequence number of the request for this reply 4493 Length uint32 // number of bytes in this reply 4494 // padding: 1 bytes 4495 // padding: 4 bytes 4496 N uint32 4497 Datum Float32 4498 // padding: 12 bytes 4499 Data []Float32 // size: xgb.Pad((int(N) * 4)) 4500 } 4501 4502 // Reply blocks and returns the reply data for a GetFloatv request. 4503 func (cook GetFloatvCookie) Reply() (*GetFloatvReply, error) { 4504 buf, err := cook.Cookie.Reply() 4505 if err != nil { 4506 return nil, err 4507 } 4508 if buf == nil { 4509 return nil, nil 4510 } 4511 return getFloatvReply(buf), nil 4512 } 4513 4514 // getFloatvReply reads a byte slice into a GetFloatvReply value. 4515 func getFloatvReply(buf []byte) *GetFloatvReply { 4516 v := new(GetFloatvReply) 4517 b := 1 // skip reply determinant 4518 4519 b += 1 // padding 4520 4521 v.Sequence = xgb.Get16(buf[b:]) 4522 b += 2 4523 4524 v.Length = xgb.Get32(buf[b:]) // 4-byte units 4525 b += 4 4526 4527 b += 4 // padding 4528 4529 v.N = xgb.Get32(buf[b:]) 4530 b += 4 4531 4532 v.Datum = Float32(xgb.Get32(buf[b:])) 4533 b += 4 4534 4535 b += 12 // padding 4536 4537 v.Data = make([]Float32, v.N) 4538 for i := 0; i < int(v.N); i++ { 4539 v.Data[i] = Float32(xgb.Get32(buf[b:])) 4540 b += 4 4541 } 4542 4543 return v 4544 } 4545 4546 // Write request to wire for GetFloatv 4547 // getFloatvRequest writes a GetFloatv request to a byte slice. 4548 func getFloatvRequest(c *xgb.Conn, ContextTag ContextTag, Pname uint32) []byte { 4549 size := 12 4550 b := 0 4551 buf := make([]byte, size) 4552 4553 c.ExtLock.RLock() 4554 buf[b] = c.Extensions["GLX"] 4555 c.ExtLock.RUnlock() 4556 b += 1 4557 4558 buf[b] = 116 // request opcode 4559 b += 1 4560 4561 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 4562 b += 2 4563 4564 xgb.Put32(buf[b:], uint32(ContextTag)) 4565 b += 4 4566 4567 xgb.Put32(buf[b:], Pname) 4568 b += 4 4569 4570 return buf 4571 } 4572 4573 // GetHistogramCookie is a cookie used only for GetHistogram requests. 4574 type GetHistogramCookie struct { 4575 *xgb.Cookie 4576 } 4577 4578 // GetHistogram sends a checked request. 4579 // If an error occurs, it will be returned with the reply by calling GetHistogramCookie.Reply() 4580 func GetHistogram(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool, Reset bool) GetHistogramCookie { 4581 c.ExtLock.RLock() 4582 defer c.ExtLock.RUnlock() 4583 if _, ok := c.Extensions["GLX"]; !ok { 4584 panic("Cannot issue request 'GetHistogram' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4585 } 4586 cookie := c.NewCookie(true, true) 4587 c.NewRequest(getHistogramRequest(c, ContextTag, Target, Format, Type, SwapBytes, Reset), cookie) 4588 return GetHistogramCookie{cookie} 4589 } 4590 4591 // GetHistogramUnchecked sends an unchecked request. 4592 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 4593 func GetHistogramUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool, Reset bool) GetHistogramCookie { 4594 c.ExtLock.RLock() 4595 defer c.ExtLock.RUnlock() 4596 if _, ok := c.Extensions["GLX"]; !ok { 4597 panic("Cannot issue request 'GetHistogram' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4598 } 4599 cookie := c.NewCookie(false, true) 4600 c.NewRequest(getHistogramRequest(c, ContextTag, Target, Format, Type, SwapBytes, Reset), cookie) 4601 return GetHistogramCookie{cookie} 4602 } 4603 4604 // GetHistogramReply represents the data returned from a GetHistogram request. 4605 type GetHistogramReply struct { 4606 Sequence uint16 // sequence number of the request for this reply 4607 Length uint32 // number of bytes in this reply 4608 // padding: 1 bytes 4609 // padding: 8 bytes 4610 Width int32 4611 // padding: 12 bytes 4612 Data []byte // size: xgb.Pad(((int(Length) * 4) * 1)) 4613 } 4614 4615 // Reply blocks and returns the reply data for a GetHistogram request. 4616 func (cook GetHistogramCookie) Reply() (*GetHistogramReply, error) { 4617 buf, err := cook.Cookie.Reply() 4618 if err != nil { 4619 return nil, err 4620 } 4621 if buf == nil { 4622 return nil, nil 4623 } 4624 return getHistogramReply(buf), nil 4625 } 4626 4627 // getHistogramReply reads a byte slice into a GetHistogramReply value. 4628 func getHistogramReply(buf []byte) *GetHistogramReply { 4629 v := new(GetHistogramReply) 4630 b := 1 // skip reply determinant 4631 4632 b += 1 // padding 4633 4634 v.Sequence = xgb.Get16(buf[b:]) 4635 b += 2 4636 4637 v.Length = xgb.Get32(buf[b:]) // 4-byte units 4638 b += 4 4639 4640 b += 8 // padding 4641 4642 v.Width = int32(xgb.Get32(buf[b:])) 4643 b += 4 4644 4645 b += 12 // padding 4646 4647 v.Data = make([]byte, (int(v.Length) * 4)) 4648 copy(v.Data[:(int(v.Length)*4)], buf[b:]) 4649 b += int((int(v.Length) * 4)) 4650 4651 return v 4652 } 4653 4654 // Write request to wire for GetHistogram 4655 // getHistogramRequest writes a GetHistogram request to a byte slice. 4656 func getHistogramRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool, Reset bool) []byte { 4657 size := 24 4658 b := 0 4659 buf := make([]byte, size) 4660 4661 c.ExtLock.RLock() 4662 buf[b] = c.Extensions["GLX"] 4663 c.ExtLock.RUnlock() 4664 b += 1 4665 4666 buf[b] = 154 // request opcode 4667 b += 1 4668 4669 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 4670 b += 2 4671 4672 xgb.Put32(buf[b:], uint32(ContextTag)) 4673 b += 4 4674 4675 xgb.Put32(buf[b:], Target) 4676 b += 4 4677 4678 xgb.Put32(buf[b:], Format) 4679 b += 4 4680 4681 xgb.Put32(buf[b:], Type) 4682 b += 4 4683 4684 if SwapBytes { 4685 buf[b] = 1 4686 } else { 4687 buf[b] = 0 4688 } 4689 b += 1 4690 4691 if Reset { 4692 buf[b] = 1 4693 } else { 4694 buf[b] = 0 4695 } 4696 b += 1 4697 4698 return buf 4699 } 4700 4701 // GetHistogramParameterfvCookie is a cookie used only for GetHistogramParameterfv requests. 4702 type GetHistogramParameterfvCookie struct { 4703 *xgb.Cookie 4704 } 4705 4706 // GetHistogramParameterfv sends a checked request. 4707 // If an error occurs, it will be returned with the reply by calling GetHistogramParameterfvCookie.Reply() 4708 func GetHistogramParameterfv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetHistogramParameterfvCookie { 4709 c.ExtLock.RLock() 4710 defer c.ExtLock.RUnlock() 4711 if _, ok := c.Extensions["GLX"]; !ok { 4712 panic("Cannot issue request 'GetHistogramParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4713 } 4714 cookie := c.NewCookie(true, true) 4715 c.NewRequest(getHistogramParameterfvRequest(c, ContextTag, Target, Pname), cookie) 4716 return GetHistogramParameterfvCookie{cookie} 4717 } 4718 4719 // GetHistogramParameterfvUnchecked sends an unchecked request. 4720 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 4721 func GetHistogramParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetHistogramParameterfvCookie { 4722 c.ExtLock.RLock() 4723 defer c.ExtLock.RUnlock() 4724 if _, ok := c.Extensions["GLX"]; !ok { 4725 panic("Cannot issue request 'GetHistogramParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4726 } 4727 cookie := c.NewCookie(false, true) 4728 c.NewRequest(getHistogramParameterfvRequest(c, ContextTag, Target, Pname), cookie) 4729 return GetHistogramParameterfvCookie{cookie} 4730 } 4731 4732 // GetHistogramParameterfvReply represents the data returned from a GetHistogramParameterfv request. 4733 type GetHistogramParameterfvReply struct { 4734 Sequence uint16 // sequence number of the request for this reply 4735 Length uint32 // number of bytes in this reply 4736 // padding: 1 bytes 4737 // padding: 4 bytes 4738 N uint32 4739 Datum Float32 4740 // padding: 12 bytes 4741 Data []Float32 // size: xgb.Pad((int(N) * 4)) 4742 } 4743 4744 // Reply blocks and returns the reply data for a GetHistogramParameterfv request. 4745 func (cook GetHistogramParameterfvCookie) Reply() (*GetHistogramParameterfvReply, error) { 4746 buf, err := cook.Cookie.Reply() 4747 if err != nil { 4748 return nil, err 4749 } 4750 if buf == nil { 4751 return nil, nil 4752 } 4753 return getHistogramParameterfvReply(buf), nil 4754 } 4755 4756 // getHistogramParameterfvReply reads a byte slice into a GetHistogramParameterfvReply value. 4757 func getHistogramParameterfvReply(buf []byte) *GetHistogramParameterfvReply { 4758 v := new(GetHistogramParameterfvReply) 4759 b := 1 // skip reply determinant 4760 4761 b += 1 // padding 4762 4763 v.Sequence = xgb.Get16(buf[b:]) 4764 b += 2 4765 4766 v.Length = xgb.Get32(buf[b:]) // 4-byte units 4767 b += 4 4768 4769 b += 4 // padding 4770 4771 v.N = xgb.Get32(buf[b:]) 4772 b += 4 4773 4774 v.Datum = Float32(xgb.Get32(buf[b:])) 4775 b += 4 4776 4777 b += 12 // padding 4778 4779 v.Data = make([]Float32, v.N) 4780 for i := 0; i < int(v.N); i++ { 4781 v.Data[i] = Float32(xgb.Get32(buf[b:])) 4782 b += 4 4783 } 4784 4785 return v 4786 } 4787 4788 // Write request to wire for GetHistogramParameterfv 4789 // getHistogramParameterfvRequest writes a GetHistogramParameterfv request to a byte slice. 4790 func getHistogramParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 4791 size := 16 4792 b := 0 4793 buf := make([]byte, size) 4794 4795 c.ExtLock.RLock() 4796 buf[b] = c.Extensions["GLX"] 4797 c.ExtLock.RUnlock() 4798 b += 1 4799 4800 buf[b] = 155 // request opcode 4801 b += 1 4802 4803 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 4804 b += 2 4805 4806 xgb.Put32(buf[b:], uint32(ContextTag)) 4807 b += 4 4808 4809 xgb.Put32(buf[b:], Target) 4810 b += 4 4811 4812 xgb.Put32(buf[b:], Pname) 4813 b += 4 4814 4815 return buf 4816 } 4817 4818 // GetHistogramParameterivCookie is a cookie used only for GetHistogramParameteriv requests. 4819 type GetHistogramParameterivCookie struct { 4820 *xgb.Cookie 4821 } 4822 4823 // GetHistogramParameteriv sends a checked request. 4824 // If an error occurs, it will be returned with the reply by calling GetHistogramParameterivCookie.Reply() 4825 func GetHistogramParameteriv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetHistogramParameterivCookie { 4826 c.ExtLock.RLock() 4827 defer c.ExtLock.RUnlock() 4828 if _, ok := c.Extensions["GLX"]; !ok { 4829 panic("Cannot issue request 'GetHistogramParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4830 } 4831 cookie := c.NewCookie(true, true) 4832 c.NewRequest(getHistogramParameterivRequest(c, ContextTag, Target, Pname), cookie) 4833 return GetHistogramParameterivCookie{cookie} 4834 } 4835 4836 // GetHistogramParameterivUnchecked sends an unchecked request. 4837 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 4838 func GetHistogramParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetHistogramParameterivCookie { 4839 c.ExtLock.RLock() 4840 defer c.ExtLock.RUnlock() 4841 if _, ok := c.Extensions["GLX"]; !ok { 4842 panic("Cannot issue request 'GetHistogramParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4843 } 4844 cookie := c.NewCookie(false, true) 4845 c.NewRequest(getHistogramParameterivRequest(c, ContextTag, Target, Pname), cookie) 4846 return GetHistogramParameterivCookie{cookie} 4847 } 4848 4849 // GetHistogramParameterivReply represents the data returned from a GetHistogramParameteriv request. 4850 type GetHistogramParameterivReply struct { 4851 Sequence uint16 // sequence number of the request for this reply 4852 Length uint32 // number of bytes in this reply 4853 // padding: 1 bytes 4854 // padding: 4 bytes 4855 N uint32 4856 Datum int32 4857 // padding: 12 bytes 4858 Data []int32 // size: xgb.Pad((int(N) * 4)) 4859 } 4860 4861 // Reply blocks and returns the reply data for a GetHistogramParameteriv request. 4862 func (cook GetHistogramParameterivCookie) Reply() (*GetHistogramParameterivReply, error) { 4863 buf, err := cook.Cookie.Reply() 4864 if err != nil { 4865 return nil, err 4866 } 4867 if buf == nil { 4868 return nil, nil 4869 } 4870 return getHistogramParameterivReply(buf), nil 4871 } 4872 4873 // getHistogramParameterivReply reads a byte slice into a GetHistogramParameterivReply value. 4874 func getHistogramParameterivReply(buf []byte) *GetHistogramParameterivReply { 4875 v := new(GetHistogramParameterivReply) 4876 b := 1 // skip reply determinant 4877 4878 b += 1 // padding 4879 4880 v.Sequence = xgb.Get16(buf[b:]) 4881 b += 2 4882 4883 v.Length = xgb.Get32(buf[b:]) // 4-byte units 4884 b += 4 4885 4886 b += 4 // padding 4887 4888 v.N = xgb.Get32(buf[b:]) 4889 b += 4 4890 4891 v.Datum = int32(xgb.Get32(buf[b:])) 4892 b += 4 4893 4894 b += 12 // padding 4895 4896 v.Data = make([]int32, v.N) 4897 for i := 0; i < int(v.N); i++ { 4898 v.Data[i] = int32(xgb.Get32(buf[b:])) 4899 b += 4 4900 } 4901 4902 return v 4903 } 4904 4905 // Write request to wire for GetHistogramParameteriv 4906 // getHistogramParameterivRequest writes a GetHistogramParameteriv request to a byte slice. 4907 func getHistogramParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 4908 size := 16 4909 b := 0 4910 buf := make([]byte, size) 4911 4912 c.ExtLock.RLock() 4913 buf[b] = c.Extensions["GLX"] 4914 c.ExtLock.RUnlock() 4915 b += 1 4916 4917 buf[b] = 156 // request opcode 4918 b += 1 4919 4920 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 4921 b += 2 4922 4923 xgb.Put32(buf[b:], uint32(ContextTag)) 4924 b += 4 4925 4926 xgb.Put32(buf[b:], Target) 4927 b += 4 4928 4929 xgb.Put32(buf[b:], Pname) 4930 b += 4 4931 4932 return buf 4933 } 4934 4935 // GetIntegervCookie is a cookie used only for GetIntegerv requests. 4936 type GetIntegervCookie struct { 4937 *xgb.Cookie 4938 } 4939 4940 // GetIntegerv sends a checked request. 4941 // If an error occurs, it will be returned with the reply by calling GetIntegervCookie.Reply() 4942 func GetIntegerv(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetIntegervCookie { 4943 c.ExtLock.RLock() 4944 defer c.ExtLock.RUnlock() 4945 if _, ok := c.Extensions["GLX"]; !ok { 4946 panic("Cannot issue request 'GetIntegerv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4947 } 4948 cookie := c.NewCookie(true, true) 4949 c.NewRequest(getIntegervRequest(c, ContextTag, Pname), cookie) 4950 return GetIntegervCookie{cookie} 4951 } 4952 4953 // GetIntegervUnchecked sends an unchecked request. 4954 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 4955 func GetIntegervUnchecked(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetIntegervCookie { 4956 c.ExtLock.RLock() 4957 defer c.ExtLock.RUnlock() 4958 if _, ok := c.Extensions["GLX"]; !ok { 4959 panic("Cannot issue request 'GetIntegerv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 4960 } 4961 cookie := c.NewCookie(false, true) 4962 c.NewRequest(getIntegervRequest(c, ContextTag, Pname), cookie) 4963 return GetIntegervCookie{cookie} 4964 } 4965 4966 // GetIntegervReply represents the data returned from a GetIntegerv request. 4967 type GetIntegervReply struct { 4968 Sequence uint16 // sequence number of the request for this reply 4969 Length uint32 // number of bytes in this reply 4970 // padding: 1 bytes 4971 // padding: 4 bytes 4972 N uint32 4973 Datum int32 4974 // padding: 12 bytes 4975 Data []int32 // size: xgb.Pad((int(N) * 4)) 4976 } 4977 4978 // Reply blocks and returns the reply data for a GetIntegerv request. 4979 func (cook GetIntegervCookie) Reply() (*GetIntegervReply, error) { 4980 buf, err := cook.Cookie.Reply() 4981 if err != nil { 4982 return nil, err 4983 } 4984 if buf == nil { 4985 return nil, nil 4986 } 4987 return getIntegervReply(buf), nil 4988 } 4989 4990 // getIntegervReply reads a byte slice into a GetIntegervReply value. 4991 func getIntegervReply(buf []byte) *GetIntegervReply { 4992 v := new(GetIntegervReply) 4993 b := 1 // skip reply determinant 4994 4995 b += 1 // padding 4996 4997 v.Sequence = xgb.Get16(buf[b:]) 4998 b += 2 4999 5000 v.Length = xgb.Get32(buf[b:]) // 4-byte units 5001 b += 4 5002 5003 b += 4 // padding 5004 5005 v.N = xgb.Get32(buf[b:]) 5006 b += 4 5007 5008 v.Datum = int32(xgb.Get32(buf[b:])) 5009 b += 4 5010 5011 b += 12 // padding 5012 5013 v.Data = make([]int32, v.N) 5014 for i := 0; i < int(v.N); i++ { 5015 v.Data[i] = int32(xgb.Get32(buf[b:])) 5016 b += 4 5017 } 5018 5019 return v 5020 } 5021 5022 // Write request to wire for GetIntegerv 5023 // getIntegervRequest writes a GetIntegerv request to a byte slice. 5024 func getIntegervRequest(c *xgb.Conn, ContextTag ContextTag, Pname uint32) []byte { 5025 size := 12 5026 b := 0 5027 buf := make([]byte, size) 5028 5029 c.ExtLock.RLock() 5030 buf[b] = c.Extensions["GLX"] 5031 c.ExtLock.RUnlock() 5032 b += 1 5033 5034 buf[b] = 117 // request opcode 5035 b += 1 5036 5037 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 5038 b += 2 5039 5040 xgb.Put32(buf[b:], uint32(ContextTag)) 5041 b += 4 5042 5043 xgb.Put32(buf[b:], Pname) 5044 b += 4 5045 5046 return buf 5047 } 5048 5049 // GetLightfvCookie is a cookie used only for GetLightfv requests. 5050 type GetLightfvCookie struct { 5051 *xgb.Cookie 5052 } 5053 5054 // GetLightfv sends a checked request. 5055 // If an error occurs, it will be returned with the reply by calling GetLightfvCookie.Reply() 5056 func GetLightfv(c *xgb.Conn, ContextTag ContextTag, Light uint32, Pname uint32) GetLightfvCookie { 5057 c.ExtLock.RLock() 5058 defer c.ExtLock.RUnlock() 5059 if _, ok := c.Extensions["GLX"]; !ok { 5060 panic("Cannot issue request 'GetLightfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5061 } 5062 cookie := c.NewCookie(true, true) 5063 c.NewRequest(getLightfvRequest(c, ContextTag, Light, Pname), cookie) 5064 return GetLightfvCookie{cookie} 5065 } 5066 5067 // GetLightfvUnchecked sends an unchecked request. 5068 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 5069 func GetLightfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Light uint32, Pname uint32) GetLightfvCookie { 5070 c.ExtLock.RLock() 5071 defer c.ExtLock.RUnlock() 5072 if _, ok := c.Extensions["GLX"]; !ok { 5073 panic("Cannot issue request 'GetLightfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5074 } 5075 cookie := c.NewCookie(false, true) 5076 c.NewRequest(getLightfvRequest(c, ContextTag, Light, Pname), cookie) 5077 return GetLightfvCookie{cookie} 5078 } 5079 5080 // GetLightfvReply represents the data returned from a GetLightfv request. 5081 type GetLightfvReply struct { 5082 Sequence uint16 // sequence number of the request for this reply 5083 Length uint32 // number of bytes in this reply 5084 // padding: 1 bytes 5085 // padding: 4 bytes 5086 N uint32 5087 Datum Float32 5088 // padding: 12 bytes 5089 Data []Float32 // size: xgb.Pad((int(N) * 4)) 5090 } 5091 5092 // Reply blocks and returns the reply data for a GetLightfv request. 5093 func (cook GetLightfvCookie) Reply() (*GetLightfvReply, error) { 5094 buf, err := cook.Cookie.Reply() 5095 if err != nil { 5096 return nil, err 5097 } 5098 if buf == nil { 5099 return nil, nil 5100 } 5101 return getLightfvReply(buf), nil 5102 } 5103 5104 // getLightfvReply reads a byte slice into a GetLightfvReply value. 5105 func getLightfvReply(buf []byte) *GetLightfvReply { 5106 v := new(GetLightfvReply) 5107 b := 1 // skip reply determinant 5108 5109 b += 1 // padding 5110 5111 v.Sequence = xgb.Get16(buf[b:]) 5112 b += 2 5113 5114 v.Length = xgb.Get32(buf[b:]) // 4-byte units 5115 b += 4 5116 5117 b += 4 // padding 5118 5119 v.N = xgb.Get32(buf[b:]) 5120 b += 4 5121 5122 v.Datum = Float32(xgb.Get32(buf[b:])) 5123 b += 4 5124 5125 b += 12 // padding 5126 5127 v.Data = make([]Float32, v.N) 5128 for i := 0; i < int(v.N); i++ { 5129 v.Data[i] = Float32(xgb.Get32(buf[b:])) 5130 b += 4 5131 } 5132 5133 return v 5134 } 5135 5136 // Write request to wire for GetLightfv 5137 // getLightfvRequest writes a GetLightfv request to a byte slice. 5138 func getLightfvRequest(c *xgb.Conn, ContextTag ContextTag, Light uint32, Pname uint32) []byte { 5139 size := 16 5140 b := 0 5141 buf := make([]byte, size) 5142 5143 c.ExtLock.RLock() 5144 buf[b] = c.Extensions["GLX"] 5145 c.ExtLock.RUnlock() 5146 b += 1 5147 5148 buf[b] = 118 // request opcode 5149 b += 1 5150 5151 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 5152 b += 2 5153 5154 xgb.Put32(buf[b:], uint32(ContextTag)) 5155 b += 4 5156 5157 xgb.Put32(buf[b:], Light) 5158 b += 4 5159 5160 xgb.Put32(buf[b:], Pname) 5161 b += 4 5162 5163 return buf 5164 } 5165 5166 // GetLightivCookie is a cookie used only for GetLightiv requests. 5167 type GetLightivCookie struct { 5168 *xgb.Cookie 5169 } 5170 5171 // GetLightiv sends a checked request. 5172 // If an error occurs, it will be returned with the reply by calling GetLightivCookie.Reply() 5173 func GetLightiv(c *xgb.Conn, ContextTag ContextTag, Light uint32, Pname uint32) GetLightivCookie { 5174 c.ExtLock.RLock() 5175 defer c.ExtLock.RUnlock() 5176 if _, ok := c.Extensions["GLX"]; !ok { 5177 panic("Cannot issue request 'GetLightiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5178 } 5179 cookie := c.NewCookie(true, true) 5180 c.NewRequest(getLightivRequest(c, ContextTag, Light, Pname), cookie) 5181 return GetLightivCookie{cookie} 5182 } 5183 5184 // GetLightivUnchecked sends an unchecked request. 5185 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 5186 func GetLightivUnchecked(c *xgb.Conn, ContextTag ContextTag, Light uint32, Pname uint32) GetLightivCookie { 5187 c.ExtLock.RLock() 5188 defer c.ExtLock.RUnlock() 5189 if _, ok := c.Extensions["GLX"]; !ok { 5190 panic("Cannot issue request 'GetLightiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5191 } 5192 cookie := c.NewCookie(false, true) 5193 c.NewRequest(getLightivRequest(c, ContextTag, Light, Pname), cookie) 5194 return GetLightivCookie{cookie} 5195 } 5196 5197 // GetLightivReply represents the data returned from a GetLightiv request. 5198 type GetLightivReply struct { 5199 Sequence uint16 // sequence number of the request for this reply 5200 Length uint32 // number of bytes in this reply 5201 // padding: 1 bytes 5202 // padding: 4 bytes 5203 N uint32 5204 Datum int32 5205 // padding: 12 bytes 5206 Data []int32 // size: xgb.Pad((int(N) * 4)) 5207 } 5208 5209 // Reply blocks and returns the reply data for a GetLightiv request. 5210 func (cook GetLightivCookie) Reply() (*GetLightivReply, error) { 5211 buf, err := cook.Cookie.Reply() 5212 if err != nil { 5213 return nil, err 5214 } 5215 if buf == nil { 5216 return nil, nil 5217 } 5218 return getLightivReply(buf), nil 5219 } 5220 5221 // getLightivReply reads a byte slice into a GetLightivReply value. 5222 func getLightivReply(buf []byte) *GetLightivReply { 5223 v := new(GetLightivReply) 5224 b := 1 // skip reply determinant 5225 5226 b += 1 // padding 5227 5228 v.Sequence = xgb.Get16(buf[b:]) 5229 b += 2 5230 5231 v.Length = xgb.Get32(buf[b:]) // 4-byte units 5232 b += 4 5233 5234 b += 4 // padding 5235 5236 v.N = xgb.Get32(buf[b:]) 5237 b += 4 5238 5239 v.Datum = int32(xgb.Get32(buf[b:])) 5240 b += 4 5241 5242 b += 12 // padding 5243 5244 v.Data = make([]int32, v.N) 5245 for i := 0; i < int(v.N); i++ { 5246 v.Data[i] = int32(xgb.Get32(buf[b:])) 5247 b += 4 5248 } 5249 5250 return v 5251 } 5252 5253 // Write request to wire for GetLightiv 5254 // getLightivRequest writes a GetLightiv request to a byte slice. 5255 func getLightivRequest(c *xgb.Conn, ContextTag ContextTag, Light uint32, Pname uint32) []byte { 5256 size := 16 5257 b := 0 5258 buf := make([]byte, size) 5259 5260 c.ExtLock.RLock() 5261 buf[b] = c.Extensions["GLX"] 5262 c.ExtLock.RUnlock() 5263 b += 1 5264 5265 buf[b] = 119 // request opcode 5266 b += 1 5267 5268 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 5269 b += 2 5270 5271 xgb.Put32(buf[b:], uint32(ContextTag)) 5272 b += 4 5273 5274 xgb.Put32(buf[b:], Light) 5275 b += 4 5276 5277 xgb.Put32(buf[b:], Pname) 5278 b += 4 5279 5280 return buf 5281 } 5282 5283 // GetMapdvCookie is a cookie used only for GetMapdv requests. 5284 type GetMapdvCookie struct { 5285 *xgb.Cookie 5286 } 5287 5288 // GetMapdv sends a checked request. 5289 // If an error occurs, it will be returned with the reply by calling GetMapdvCookie.Reply() 5290 func GetMapdv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Query uint32) GetMapdvCookie { 5291 c.ExtLock.RLock() 5292 defer c.ExtLock.RUnlock() 5293 if _, ok := c.Extensions["GLX"]; !ok { 5294 panic("Cannot issue request 'GetMapdv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5295 } 5296 cookie := c.NewCookie(true, true) 5297 c.NewRequest(getMapdvRequest(c, ContextTag, Target, Query), cookie) 5298 return GetMapdvCookie{cookie} 5299 } 5300 5301 // GetMapdvUnchecked sends an unchecked request. 5302 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 5303 func GetMapdvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Query uint32) GetMapdvCookie { 5304 c.ExtLock.RLock() 5305 defer c.ExtLock.RUnlock() 5306 if _, ok := c.Extensions["GLX"]; !ok { 5307 panic("Cannot issue request 'GetMapdv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5308 } 5309 cookie := c.NewCookie(false, true) 5310 c.NewRequest(getMapdvRequest(c, ContextTag, Target, Query), cookie) 5311 return GetMapdvCookie{cookie} 5312 } 5313 5314 // GetMapdvReply represents the data returned from a GetMapdv request. 5315 type GetMapdvReply struct { 5316 Sequence uint16 // sequence number of the request for this reply 5317 Length uint32 // number of bytes in this reply 5318 // padding: 1 bytes 5319 // padding: 4 bytes 5320 N uint32 5321 Datum Float64 5322 // padding: 8 bytes 5323 Data []Float64 // size: xgb.Pad((int(N) * 8)) 5324 } 5325 5326 // Reply blocks and returns the reply data for a GetMapdv request. 5327 func (cook GetMapdvCookie) Reply() (*GetMapdvReply, error) { 5328 buf, err := cook.Cookie.Reply() 5329 if err != nil { 5330 return nil, err 5331 } 5332 if buf == nil { 5333 return nil, nil 5334 } 5335 return getMapdvReply(buf), nil 5336 } 5337 5338 // getMapdvReply reads a byte slice into a GetMapdvReply value. 5339 func getMapdvReply(buf []byte) *GetMapdvReply { 5340 v := new(GetMapdvReply) 5341 b := 1 // skip reply determinant 5342 5343 b += 1 // padding 5344 5345 v.Sequence = xgb.Get16(buf[b:]) 5346 b += 2 5347 5348 v.Length = xgb.Get32(buf[b:]) // 4-byte units 5349 b += 4 5350 5351 b += 4 // padding 5352 5353 v.N = xgb.Get32(buf[b:]) 5354 b += 4 5355 5356 v.Datum = Float64(xgb.Get64(buf[b:])) 5357 b += 8 5358 5359 b += 8 // padding 5360 5361 v.Data = make([]Float64, v.N) 5362 for i := 0; i < int(v.N); i++ { 5363 v.Data[i] = Float64(xgb.Get64(buf[b:])) 5364 b += 8 5365 } 5366 5367 return v 5368 } 5369 5370 // Write request to wire for GetMapdv 5371 // getMapdvRequest writes a GetMapdv request to a byte slice. 5372 func getMapdvRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Query uint32) []byte { 5373 size := 16 5374 b := 0 5375 buf := make([]byte, size) 5376 5377 c.ExtLock.RLock() 5378 buf[b] = c.Extensions["GLX"] 5379 c.ExtLock.RUnlock() 5380 b += 1 5381 5382 buf[b] = 120 // request opcode 5383 b += 1 5384 5385 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 5386 b += 2 5387 5388 xgb.Put32(buf[b:], uint32(ContextTag)) 5389 b += 4 5390 5391 xgb.Put32(buf[b:], Target) 5392 b += 4 5393 5394 xgb.Put32(buf[b:], Query) 5395 b += 4 5396 5397 return buf 5398 } 5399 5400 // GetMapfvCookie is a cookie used only for GetMapfv requests. 5401 type GetMapfvCookie struct { 5402 *xgb.Cookie 5403 } 5404 5405 // GetMapfv sends a checked request. 5406 // If an error occurs, it will be returned with the reply by calling GetMapfvCookie.Reply() 5407 func GetMapfv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Query uint32) GetMapfvCookie { 5408 c.ExtLock.RLock() 5409 defer c.ExtLock.RUnlock() 5410 if _, ok := c.Extensions["GLX"]; !ok { 5411 panic("Cannot issue request 'GetMapfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5412 } 5413 cookie := c.NewCookie(true, true) 5414 c.NewRequest(getMapfvRequest(c, ContextTag, Target, Query), cookie) 5415 return GetMapfvCookie{cookie} 5416 } 5417 5418 // GetMapfvUnchecked sends an unchecked request. 5419 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 5420 func GetMapfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Query uint32) GetMapfvCookie { 5421 c.ExtLock.RLock() 5422 defer c.ExtLock.RUnlock() 5423 if _, ok := c.Extensions["GLX"]; !ok { 5424 panic("Cannot issue request 'GetMapfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5425 } 5426 cookie := c.NewCookie(false, true) 5427 c.NewRequest(getMapfvRequest(c, ContextTag, Target, Query), cookie) 5428 return GetMapfvCookie{cookie} 5429 } 5430 5431 // GetMapfvReply represents the data returned from a GetMapfv request. 5432 type GetMapfvReply struct { 5433 Sequence uint16 // sequence number of the request for this reply 5434 Length uint32 // number of bytes in this reply 5435 // padding: 1 bytes 5436 // padding: 4 bytes 5437 N uint32 5438 Datum Float32 5439 // padding: 12 bytes 5440 Data []Float32 // size: xgb.Pad((int(N) * 4)) 5441 } 5442 5443 // Reply blocks and returns the reply data for a GetMapfv request. 5444 func (cook GetMapfvCookie) Reply() (*GetMapfvReply, error) { 5445 buf, err := cook.Cookie.Reply() 5446 if err != nil { 5447 return nil, err 5448 } 5449 if buf == nil { 5450 return nil, nil 5451 } 5452 return getMapfvReply(buf), nil 5453 } 5454 5455 // getMapfvReply reads a byte slice into a GetMapfvReply value. 5456 func getMapfvReply(buf []byte) *GetMapfvReply { 5457 v := new(GetMapfvReply) 5458 b := 1 // skip reply determinant 5459 5460 b += 1 // padding 5461 5462 v.Sequence = xgb.Get16(buf[b:]) 5463 b += 2 5464 5465 v.Length = xgb.Get32(buf[b:]) // 4-byte units 5466 b += 4 5467 5468 b += 4 // padding 5469 5470 v.N = xgb.Get32(buf[b:]) 5471 b += 4 5472 5473 v.Datum = Float32(xgb.Get32(buf[b:])) 5474 b += 4 5475 5476 b += 12 // padding 5477 5478 v.Data = make([]Float32, v.N) 5479 for i := 0; i < int(v.N); i++ { 5480 v.Data[i] = Float32(xgb.Get32(buf[b:])) 5481 b += 4 5482 } 5483 5484 return v 5485 } 5486 5487 // Write request to wire for GetMapfv 5488 // getMapfvRequest writes a GetMapfv request to a byte slice. 5489 func getMapfvRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Query uint32) []byte { 5490 size := 16 5491 b := 0 5492 buf := make([]byte, size) 5493 5494 c.ExtLock.RLock() 5495 buf[b] = c.Extensions["GLX"] 5496 c.ExtLock.RUnlock() 5497 b += 1 5498 5499 buf[b] = 121 // request opcode 5500 b += 1 5501 5502 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 5503 b += 2 5504 5505 xgb.Put32(buf[b:], uint32(ContextTag)) 5506 b += 4 5507 5508 xgb.Put32(buf[b:], Target) 5509 b += 4 5510 5511 xgb.Put32(buf[b:], Query) 5512 b += 4 5513 5514 return buf 5515 } 5516 5517 // GetMapivCookie is a cookie used only for GetMapiv requests. 5518 type GetMapivCookie struct { 5519 *xgb.Cookie 5520 } 5521 5522 // GetMapiv sends a checked request. 5523 // If an error occurs, it will be returned with the reply by calling GetMapivCookie.Reply() 5524 func GetMapiv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Query uint32) GetMapivCookie { 5525 c.ExtLock.RLock() 5526 defer c.ExtLock.RUnlock() 5527 if _, ok := c.Extensions["GLX"]; !ok { 5528 panic("Cannot issue request 'GetMapiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5529 } 5530 cookie := c.NewCookie(true, true) 5531 c.NewRequest(getMapivRequest(c, ContextTag, Target, Query), cookie) 5532 return GetMapivCookie{cookie} 5533 } 5534 5535 // GetMapivUnchecked sends an unchecked request. 5536 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 5537 func GetMapivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Query uint32) GetMapivCookie { 5538 c.ExtLock.RLock() 5539 defer c.ExtLock.RUnlock() 5540 if _, ok := c.Extensions["GLX"]; !ok { 5541 panic("Cannot issue request 'GetMapiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5542 } 5543 cookie := c.NewCookie(false, true) 5544 c.NewRequest(getMapivRequest(c, ContextTag, Target, Query), cookie) 5545 return GetMapivCookie{cookie} 5546 } 5547 5548 // GetMapivReply represents the data returned from a GetMapiv request. 5549 type GetMapivReply struct { 5550 Sequence uint16 // sequence number of the request for this reply 5551 Length uint32 // number of bytes in this reply 5552 // padding: 1 bytes 5553 // padding: 4 bytes 5554 N uint32 5555 Datum int32 5556 // padding: 12 bytes 5557 Data []int32 // size: xgb.Pad((int(N) * 4)) 5558 } 5559 5560 // Reply blocks and returns the reply data for a GetMapiv request. 5561 func (cook GetMapivCookie) Reply() (*GetMapivReply, error) { 5562 buf, err := cook.Cookie.Reply() 5563 if err != nil { 5564 return nil, err 5565 } 5566 if buf == nil { 5567 return nil, nil 5568 } 5569 return getMapivReply(buf), nil 5570 } 5571 5572 // getMapivReply reads a byte slice into a GetMapivReply value. 5573 func getMapivReply(buf []byte) *GetMapivReply { 5574 v := new(GetMapivReply) 5575 b := 1 // skip reply determinant 5576 5577 b += 1 // padding 5578 5579 v.Sequence = xgb.Get16(buf[b:]) 5580 b += 2 5581 5582 v.Length = xgb.Get32(buf[b:]) // 4-byte units 5583 b += 4 5584 5585 b += 4 // padding 5586 5587 v.N = xgb.Get32(buf[b:]) 5588 b += 4 5589 5590 v.Datum = int32(xgb.Get32(buf[b:])) 5591 b += 4 5592 5593 b += 12 // padding 5594 5595 v.Data = make([]int32, v.N) 5596 for i := 0; i < int(v.N); i++ { 5597 v.Data[i] = int32(xgb.Get32(buf[b:])) 5598 b += 4 5599 } 5600 5601 return v 5602 } 5603 5604 // Write request to wire for GetMapiv 5605 // getMapivRequest writes a GetMapiv request to a byte slice. 5606 func getMapivRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Query uint32) []byte { 5607 size := 16 5608 b := 0 5609 buf := make([]byte, size) 5610 5611 c.ExtLock.RLock() 5612 buf[b] = c.Extensions["GLX"] 5613 c.ExtLock.RUnlock() 5614 b += 1 5615 5616 buf[b] = 122 // request opcode 5617 b += 1 5618 5619 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 5620 b += 2 5621 5622 xgb.Put32(buf[b:], uint32(ContextTag)) 5623 b += 4 5624 5625 xgb.Put32(buf[b:], Target) 5626 b += 4 5627 5628 xgb.Put32(buf[b:], Query) 5629 b += 4 5630 5631 return buf 5632 } 5633 5634 // GetMaterialfvCookie is a cookie used only for GetMaterialfv requests. 5635 type GetMaterialfvCookie struct { 5636 *xgb.Cookie 5637 } 5638 5639 // GetMaterialfv sends a checked request. 5640 // If an error occurs, it will be returned with the reply by calling GetMaterialfvCookie.Reply() 5641 func GetMaterialfv(c *xgb.Conn, ContextTag ContextTag, Face uint32, Pname uint32) GetMaterialfvCookie { 5642 c.ExtLock.RLock() 5643 defer c.ExtLock.RUnlock() 5644 if _, ok := c.Extensions["GLX"]; !ok { 5645 panic("Cannot issue request 'GetMaterialfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5646 } 5647 cookie := c.NewCookie(true, true) 5648 c.NewRequest(getMaterialfvRequest(c, ContextTag, Face, Pname), cookie) 5649 return GetMaterialfvCookie{cookie} 5650 } 5651 5652 // GetMaterialfvUnchecked sends an unchecked request. 5653 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 5654 func GetMaterialfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Face uint32, Pname uint32) GetMaterialfvCookie { 5655 c.ExtLock.RLock() 5656 defer c.ExtLock.RUnlock() 5657 if _, ok := c.Extensions["GLX"]; !ok { 5658 panic("Cannot issue request 'GetMaterialfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5659 } 5660 cookie := c.NewCookie(false, true) 5661 c.NewRequest(getMaterialfvRequest(c, ContextTag, Face, Pname), cookie) 5662 return GetMaterialfvCookie{cookie} 5663 } 5664 5665 // GetMaterialfvReply represents the data returned from a GetMaterialfv request. 5666 type GetMaterialfvReply struct { 5667 Sequence uint16 // sequence number of the request for this reply 5668 Length uint32 // number of bytes in this reply 5669 // padding: 1 bytes 5670 // padding: 4 bytes 5671 N uint32 5672 Datum Float32 5673 // padding: 12 bytes 5674 Data []Float32 // size: xgb.Pad((int(N) * 4)) 5675 } 5676 5677 // Reply blocks and returns the reply data for a GetMaterialfv request. 5678 func (cook GetMaterialfvCookie) Reply() (*GetMaterialfvReply, error) { 5679 buf, err := cook.Cookie.Reply() 5680 if err != nil { 5681 return nil, err 5682 } 5683 if buf == nil { 5684 return nil, nil 5685 } 5686 return getMaterialfvReply(buf), nil 5687 } 5688 5689 // getMaterialfvReply reads a byte slice into a GetMaterialfvReply value. 5690 func getMaterialfvReply(buf []byte) *GetMaterialfvReply { 5691 v := new(GetMaterialfvReply) 5692 b := 1 // skip reply determinant 5693 5694 b += 1 // padding 5695 5696 v.Sequence = xgb.Get16(buf[b:]) 5697 b += 2 5698 5699 v.Length = xgb.Get32(buf[b:]) // 4-byte units 5700 b += 4 5701 5702 b += 4 // padding 5703 5704 v.N = xgb.Get32(buf[b:]) 5705 b += 4 5706 5707 v.Datum = Float32(xgb.Get32(buf[b:])) 5708 b += 4 5709 5710 b += 12 // padding 5711 5712 v.Data = make([]Float32, v.N) 5713 for i := 0; i < int(v.N); i++ { 5714 v.Data[i] = Float32(xgb.Get32(buf[b:])) 5715 b += 4 5716 } 5717 5718 return v 5719 } 5720 5721 // Write request to wire for GetMaterialfv 5722 // getMaterialfvRequest writes a GetMaterialfv request to a byte slice. 5723 func getMaterialfvRequest(c *xgb.Conn, ContextTag ContextTag, Face uint32, Pname uint32) []byte { 5724 size := 16 5725 b := 0 5726 buf := make([]byte, size) 5727 5728 c.ExtLock.RLock() 5729 buf[b] = c.Extensions["GLX"] 5730 c.ExtLock.RUnlock() 5731 b += 1 5732 5733 buf[b] = 123 // request opcode 5734 b += 1 5735 5736 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 5737 b += 2 5738 5739 xgb.Put32(buf[b:], uint32(ContextTag)) 5740 b += 4 5741 5742 xgb.Put32(buf[b:], Face) 5743 b += 4 5744 5745 xgb.Put32(buf[b:], Pname) 5746 b += 4 5747 5748 return buf 5749 } 5750 5751 // GetMaterialivCookie is a cookie used only for GetMaterialiv requests. 5752 type GetMaterialivCookie struct { 5753 *xgb.Cookie 5754 } 5755 5756 // GetMaterialiv sends a checked request. 5757 // If an error occurs, it will be returned with the reply by calling GetMaterialivCookie.Reply() 5758 func GetMaterialiv(c *xgb.Conn, ContextTag ContextTag, Face uint32, Pname uint32) GetMaterialivCookie { 5759 c.ExtLock.RLock() 5760 defer c.ExtLock.RUnlock() 5761 if _, ok := c.Extensions["GLX"]; !ok { 5762 panic("Cannot issue request 'GetMaterialiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5763 } 5764 cookie := c.NewCookie(true, true) 5765 c.NewRequest(getMaterialivRequest(c, ContextTag, Face, Pname), cookie) 5766 return GetMaterialivCookie{cookie} 5767 } 5768 5769 // GetMaterialivUnchecked sends an unchecked request. 5770 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 5771 func GetMaterialivUnchecked(c *xgb.Conn, ContextTag ContextTag, Face uint32, Pname uint32) GetMaterialivCookie { 5772 c.ExtLock.RLock() 5773 defer c.ExtLock.RUnlock() 5774 if _, ok := c.Extensions["GLX"]; !ok { 5775 panic("Cannot issue request 'GetMaterialiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5776 } 5777 cookie := c.NewCookie(false, true) 5778 c.NewRequest(getMaterialivRequest(c, ContextTag, Face, Pname), cookie) 5779 return GetMaterialivCookie{cookie} 5780 } 5781 5782 // GetMaterialivReply represents the data returned from a GetMaterialiv request. 5783 type GetMaterialivReply struct { 5784 Sequence uint16 // sequence number of the request for this reply 5785 Length uint32 // number of bytes in this reply 5786 // padding: 1 bytes 5787 // padding: 4 bytes 5788 N uint32 5789 Datum int32 5790 // padding: 12 bytes 5791 Data []int32 // size: xgb.Pad((int(N) * 4)) 5792 } 5793 5794 // Reply blocks and returns the reply data for a GetMaterialiv request. 5795 func (cook GetMaterialivCookie) Reply() (*GetMaterialivReply, error) { 5796 buf, err := cook.Cookie.Reply() 5797 if err != nil { 5798 return nil, err 5799 } 5800 if buf == nil { 5801 return nil, nil 5802 } 5803 return getMaterialivReply(buf), nil 5804 } 5805 5806 // getMaterialivReply reads a byte slice into a GetMaterialivReply value. 5807 func getMaterialivReply(buf []byte) *GetMaterialivReply { 5808 v := new(GetMaterialivReply) 5809 b := 1 // skip reply determinant 5810 5811 b += 1 // padding 5812 5813 v.Sequence = xgb.Get16(buf[b:]) 5814 b += 2 5815 5816 v.Length = xgb.Get32(buf[b:]) // 4-byte units 5817 b += 4 5818 5819 b += 4 // padding 5820 5821 v.N = xgb.Get32(buf[b:]) 5822 b += 4 5823 5824 v.Datum = int32(xgb.Get32(buf[b:])) 5825 b += 4 5826 5827 b += 12 // padding 5828 5829 v.Data = make([]int32, v.N) 5830 for i := 0; i < int(v.N); i++ { 5831 v.Data[i] = int32(xgb.Get32(buf[b:])) 5832 b += 4 5833 } 5834 5835 return v 5836 } 5837 5838 // Write request to wire for GetMaterialiv 5839 // getMaterialivRequest writes a GetMaterialiv request to a byte slice. 5840 func getMaterialivRequest(c *xgb.Conn, ContextTag ContextTag, Face uint32, Pname uint32) []byte { 5841 size := 16 5842 b := 0 5843 buf := make([]byte, size) 5844 5845 c.ExtLock.RLock() 5846 buf[b] = c.Extensions["GLX"] 5847 c.ExtLock.RUnlock() 5848 b += 1 5849 5850 buf[b] = 124 // request opcode 5851 b += 1 5852 5853 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 5854 b += 2 5855 5856 xgb.Put32(buf[b:], uint32(ContextTag)) 5857 b += 4 5858 5859 xgb.Put32(buf[b:], Face) 5860 b += 4 5861 5862 xgb.Put32(buf[b:], Pname) 5863 b += 4 5864 5865 return buf 5866 } 5867 5868 // GetMinmaxCookie is a cookie used only for GetMinmax requests. 5869 type GetMinmaxCookie struct { 5870 *xgb.Cookie 5871 } 5872 5873 // GetMinmax sends a checked request. 5874 // If an error occurs, it will be returned with the reply by calling GetMinmaxCookie.Reply() 5875 func GetMinmax(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool, Reset bool) GetMinmaxCookie { 5876 c.ExtLock.RLock() 5877 defer c.ExtLock.RUnlock() 5878 if _, ok := c.Extensions["GLX"]; !ok { 5879 panic("Cannot issue request 'GetMinmax' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5880 } 5881 cookie := c.NewCookie(true, true) 5882 c.NewRequest(getMinmaxRequest(c, ContextTag, Target, Format, Type, SwapBytes, Reset), cookie) 5883 return GetMinmaxCookie{cookie} 5884 } 5885 5886 // GetMinmaxUnchecked sends an unchecked request. 5887 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 5888 func GetMinmaxUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool, Reset bool) GetMinmaxCookie { 5889 c.ExtLock.RLock() 5890 defer c.ExtLock.RUnlock() 5891 if _, ok := c.Extensions["GLX"]; !ok { 5892 panic("Cannot issue request 'GetMinmax' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 5893 } 5894 cookie := c.NewCookie(false, true) 5895 c.NewRequest(getMinmaxRequest(c, ContextTag, Target, Format, Type, SwapBytes, Reset), cookie) 5896 return GetMinmaxCookie{cookie} 5897 } 5898 5899 // GetMinmaxReply represents the data returned from a GetMinmax request. 5900 type GetMinmaxReply struct { 5901 Sequence uint16 // sequence number of the request for this reply 5902 Length uint32 // number of bytes in this reply 5903 // padding: 1 bytes 5904 // padding: 24 bytes 5905 Data []byte // size: xgb.Pad(((int(Length) * 4) * 1)) 5906 } 5907 5908 // Reply blocks and returns the reply data for a GetMinmax request. 5909 func (cook GetMinmaxCookie) Reply() (*GetMinmaxReply, error) { 5910 buf, err := cook.Cookie.Reply() 5911 if err != nil { 5912 return nil, err 5913 } 5914 if buf == nil { 5915 return nil, nil 5916 } 5917 return getMinmaxReply(buf), nil 5918 } 5919 5920 // getMinmaxReply reads a byte slice into a GetMinmaxReply value. 5921 func getMinmaxReply(buf []byte) *GetMinmaxReply { 5922 v := new(GetMinmaxReply) 5923 b := 1 // skip reply determinant 5924 5925 b += 1 // padding 5926 5927 v.Sequence = xgb.Get16(buf[b:]) 5928 b += 2 5929 5930 v.Length = xgb.Get32(buf[b:]) // 4-byte units 5931 b += 4 5932 5933 b += 24 // padding 5934 5935 v.Data = make([]byte, (int(v.Length) * 4)) 5936 copy(v.Data[:(int(v.Length)*4)], buf[b:]) 5937 b += int((int(v.Length) * 4)) 5938 5939 return v 5940 } 5941 5942 // Write request to wire for GetMinmax 5943 // getMinmaxRequest writes a GetMinmax request to a byte slice. 5944 func getMinmaxRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool, Reset bool) []byte { 5945 size := 24 5946 b := 0 5947 buf := make([]byte, size) 5948 5949 c.ExtLock.RLock() 5950 buf[b] = c.Extensions["GLX"] 5951 c.ExtLock.RUnlock() 5952 b += 1 5953 5954 buf[b] = 157 // request opcode 5955 b += 1 5956 5957 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 5958 b += 2 5959 5960 xgb.Put32(buf[b:], uint32(ContextTag)) 5961 b += 4 5962 5963 xgb.Put32(buf[b:], Target) 5964 b += 4 5965 5966 xgb.Put32(buf[b:], Format) 5967 b += 4 5968 5969 xgb.Put32(buf[b:], Type) 5970 b += 4 5971 5972 if SwapBytes { 5973 buf[b] = 1 5974 } else { 5975 buf[b] = 0 5976 } 5977 b += 1 5978 5979 if Reset { 5980 buf[b] = 1 5981 } else { 5982 buf[b] = 0 5983 } 5984 b += 1 5985 5986 return buf 5987 } 5988 5989 // GetMinmaxParameterfvCookie is a cookie used only for GetMinmaxParameterfv requests. 5990 type GetMinmaxParameterfvCookie struct { 5991 *xgb.Cookie 5992 } 5993 5994 // GetMinmaxParameterfv sends a checked request. 5995 // If an error occurs, it will be returned with the reply by calling GetMinmaxParameterfvCookie.Reply() 5996 func GetMinmaxParameterfv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetMinmaxParameterfvCookie { 5997 c.ExtLock.RLock() 5998 defer c.ExtLock.RUnlock() 5999 if _, ok := c.Extensions["GLX"]; !ok { 6000 panic("Cannot issue request 'GetMinmaxParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6001 } 6002 cookie := c.NewCookie(true, true) 6003 c.NewRequest(getMinmaxParameterfvRequest(c, ContextTag, Target, Pname), cookie) 6004 return GetMinmaxParameterfvCookie{cookie} 6005 } 6006 6007 // GetMinmaxParameterfvUnchecked sends an unchecked request. 6008 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 6009 func GetMinmaxParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetMinmaxParameterfvCookie { 6010 c.ExtLock.RLock() 6011 defer c.ExtLock.RUnlock() 6012 if _, ok := c.Extensions["GLX"]; !ok { 6013 panic("Cannot issue request 'GetMinmaxParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6014 } 6015 cookie := c.NewCookie(false, true) 6016 c.NewRequest(getMinmaxParameterfvRequest(c, ContextTag, Target, Pname), cookie) 6017 return GetMinmaxParameterfvCookie{cookie} 6018 } 6019 6020 // GetMinmaxParameterfvReply represents the data returned from a GetMinmaxParameterfv request. 6021 type GetMinmaxParameterfvReply struct { 6022 Sequence uint16 // sequence number of the request for this reply 6023 Length uint32 // number of bytes in this reply 6024 // padding: 1 bytes 6025 // padding: 4 bytes 6026 N uint32 6027 Datum Float32 6028 // padding: 12 bytes 6029 Data []Float32 // size: xgb.Pad((int(N) * 4)) 6030 } 6031 6032 // Reply blocks and returns the reply data for a GetMinmaxParameterfv request. 6033 func (cook GetMinmaxParameterfvCookie) Reply() (*GetMinmaxParameterfvReply, error) { 6034 buf, err := cook.Cookie.Reply() 6035 if err != nil { 6036 return nil, err 6037 } 6038 if buf == nil { 6039 return nil, nil 6040 } 6041 return getMinmaxParameterfvReply(buf), nil 6042 } 6043 6044 // getMinmaxParameterfvReply reads a byte slice into a GetMinmaxParameterfvReply value. 6045 func getMinmaxParameterfvReply(buf []byte) *GetMinmaxParameterfvReply { 6046 v := new(GetMinmaxParameterfvReply) 6047 b := 1 // skip reply determinant 6048 6049 b += 1 // padding 6050 6051 v.Sequence = xgb.Get16(buf[b:]) 6052 b += 2 6053 6054 v.Length = xgb.Get32(buf[b:]) // 4-byte units 6055 b += 4 6056 6057 b += 4 // padding 6058 6059 v.N = xgb.Get32(buf[b:]) 6060 b += 4 6061 6062 v.Datum = Float32(xgb.Get32(buf[b:])) 6063 b += 4 6064 6065 b += 12 // padding 6066 6067 v.Data = make([]Float32, v.N) 6068 for i := 0; i < int(v.N); i++ { 6069 v.Data[i] = Float32(xgb.Get32(buf[b:])) 6070 b += 4 6071 } 6072 6073 return v 6074 } 6075 6076 // Write request to wire for GetMinmaxParameterfv 6077 // getMinmaxParameterfvRequest writes a GetMinmaxParameterfv request to a byte slice. 6078 func getMinmaxParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 6079 size := 16 6080 b := 0 6081 buf := make([]byte, size) 6082 6083 c.ExtLock.RLock() 6084 buf[b] = c.Extensions["GLX"] 6085 c.ExtLock.RUnlock() 6086 b += 1 6087 6088 buf[b] = 158 // request opcode 6089 b += 1 6090 6091 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 6092 b += 2 6093 6094 xgb.Put32(buf[b:], uint32(ContextTag)) 6095 b += 4 6096 6097 xgb.Put32(buf[b:], Target) 6098 b += 4 6099 6100 xgb.Put32(buf[b:], Pname) 6101 b += 4 6102 6103 return buf 6104 } 6105 6106 // GetMinmaxParameterivCookie is a cookie used only for GetMinmaxParameteriv requests. 6107 type GetMinmaxParameterivCookie struct { 6108 *xgb.Cookie 6109 } 6110 6111 // GetMinmaxParameteriv sends a checked request. 6112 // If an error occurs, it will be returned with the reply by calling GetMinmaxParameterivCookie.Reply() 6113 func GetMinmaxParameteriv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetMinmaxParameterivCookie { 6114 c.ExtLock.RLock() 6115 defer c.ExtLock.RUnlock() 6116 if _, ok := c.Extensions["GLX"]; !ok { 6117 panic("Cannot issue request 'GetMinmaxParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6118 } 6119 cookie := c.NewCookie(true, true) 6120 c.NewRequest(getMinmaxParameterivRequest(c, ContextTag, Target, Pname), cookie) 6121 return GetMinmaxParameterivCookie{cookie} 6122 } 6123 6124 // GetMinmaxParameterivUnchecked sends an unchecked request. 6125 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 6126 func GetMinmaxParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetMinmaxParameterivCookie { 6127 c.ExtLock.RLock() 6128 defer c.ExtLock.RUnlock() 6129 if _, ok := c.Extensions["GLX"]; !ok { 6130 panic("Cannot issue request 'GetMinmaxParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6131 } 6132 cookie := c.NewCookie(false, true) 6133 c.NewRequest(getMinmaxParameterivRequest(c, ContextTag, Target, Pname), cookie) 6134 return GetMinmaxParameterivCookie{cookie} 6135 } 6136 6137 // GetMinmaxParameterivReply represents the data returned from a GetMinmaxParameteriv request. 6138 type GetMinmaxParameterivReply struct { 6139 Sequence uint16 // sequence number of the request for this reply 6140 Length uint32 // number of bytes in this reply 6141 // padding: 1 bytes 6142 // padding: 4 bytes 6143 N uint32 6144 Datum int32 6145 // padding: 12 bytes 6146 Data []int32 // size: xgb.Pad((int(N) * 4)) 6147 } 6148 6149 // Reply blocks and returns the reply data for a GetMinmaxParameteriv request. 6150 func (cook GetMinmaxParameterivCookie) Reply() (*GetMinmaxParameterivReply, error) { 6151 buf, err := cook.Cookie.Reply() 6152 if err != nil { 6153 return nil, err 6154 } 6155 if buf == nil { 6156 return nil, nil 6157 } 6158 return getMinmaxParameterivReply(buf), nil 6159 } 6160 6161 // getMinmaxParameterivReply reads a byte slice into a GetMinmaxParameterivReply value. 6162 func getMinmaxParameterivReply(buf []byte) *GetMinmaxParameterivReply { 6163 v := new(GetMinmaxParameterivReply) 6164 b := 1 // skip reply determinant 6165 6166 b += 1 // padding 6167 6168 v.Sequence = xgb.Get16(buf[b:]) 6169 b += 2 6170 6171 v.Length = xgb.Get32(buf[b:]) // 4-byte units 6172 b += 4 6173 6174 b += 4 // padding 6175 6176 v.N = xgb.Get32(buf[b:]) 6177 b += 4 6178 6179 v.Datum = int32(xgb.Get32(buf[b:])) 6180 b += 4 6181 6182 b += 12 // padding 6183 6184 v.Data = make([]int32, v.N) 6185 for i := 0; i < int(v.N); i++ { 6186 v.Data[i] = int32(xgb.Get32(buf[b:])) 6187 b += 4 6188 } 6189 6190 return v 6191 } 6192 6193 // Write request to wire for GetMinmaxParameteriv 6194 // getMinmaxParameterivRequest writes a GetMinmaxParameteriv request to a byte slice. 6195 func getMinmaxParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 6196 size := 16 6197 b := 0 6198 buf := make([]byte, size) 6199 6200 c.ExtLock.RLock() 6201 buf[b] = c.Extensions["GLX"] 6202 c.ExtLock.RUnlock() 6203 b += 1 6204 6205 buf[b] = 159 // request opcode 6206 b += 1 6207 6208 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 6209 b += 2 6210 6211 xgb.Put32(buf[b:], uint32(ContextTag)) 6212 b += 4 6213 6214 xgb.Put32(buf[b:], Target) 6215 b += 4 6216 6217 xgb.Put32(buf[b:], Pname) 6218 b += 4 6219 6220 return buf 6221 } 6222 6223 // GetPixelMapfvCookie is a cookie used only for GetPixelMapfv requests. 6224 type GetPixelMapfvCookie struct { 6225 *xgb.Cookie 6226 } 6227 6228 // GetPixelMapfv sends a checked request. 6229 // If an error occurs, it will be returned with the reply by calling GetPixelMapfvCookie.Reply() 6230 func GetPixelMapfv(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapfvCookie { 6231 c.ExtLock.RLock() 6232 defer c.ExtLock.RUnlock() 6233 if _, ok := c.Extensions["GLX"]; !ok { 6234 panic("Cannot issue request 'GetPixelMapfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6235 } 6236 cookie := c.NewCookie(true, true) 6237 c.NewRequest(getPixelMapfvRequest(c, ContextTag, Map), cookie) 6238 return GetPixelMapfvCookie{cookie} 6239 } 6240 6241 // GetPixelMapfvUnchecked sends an unchecked request. 6242 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 6243 func GetPixelMapfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapfvCookie { 6244 c.ExtLock.RLock() 6245 defer c.ExtLock.RUnlock() 6246 if _, ok := c.Extensions["GLX"]; !ok { 6247 panic("Cannot issue request 'GetPixelMapfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6248 } 6249 cookie := c.NewCookie(false, true) 6250 c.NewRequest(getPixelMapfvRequest(c, ContextTag, Map), cookie) 6251 return GetPixelMapfvCookie{cookie} 6252 } 6253 6254 // GetPixelMapfvReply represents the data returned from a GetPixelMapfv request. 6255 type GetPixelMapfvReply struct { 6256 Sequence uint16 // sequence number of the request for this reply 6257 Length uint32 // number of bytes in this reply 6258 // padding: 1 bytes 6259 // padding: 4 bytes 6260 N uint32 6261 Datum Float32 6262 // padding: 12 bytes 6263 Data []Float32 // size: xgb.Pad((int(N) * 4)) 6264 } 6265 6266 // Reply blocks and returns the reply data for a GetPixelMapfv request. 6267 func (cook GetPixelMapfvCookie) Reply() (*GetPixelMapfvReply, error) { 6268 buf, err := cook.Cookie.Reply() 6269 if err != nil { 6270 return nil, err 6271 } 6272 if buf == nil { 6273 return nil, nil 6274 } 6275 return getPixelMapfvReply(buf), nil 6276 } 6277 6278 // getPixelMapfvReply reads a byte slice into a GetPixelMapfvReply value. 6279 func getPixelMapfvReply(buf []byte) *GetPixelMapfvReply { 6280 v := new(GetPixelMapfvReply) 6281 b := 1 // skip reply determinant 6282 6283 b += 1 // padding 6284 6285 v.Sequence = xgb.Get16(buf[b:]) 6286 b += 2 6287 6288 v.Length = xgb.Get32(buf[b:]) // 4-byte units 6289 b += 4 6290 6291 b += 4 // padding 6292 6293 v.N = xgb.Get32(buf[b:]) 6294 b += 4 6295 6296 v.Datum = Float32(xgb.Get32(buf[b:])) 6297 b += 4 6298 6299 b += 12 // padding 6300 6301 v.Data = make([]Float32, v.N) 6302 for i := 0; i < int(v.N); i++ { 6303 v.Data[i] = Float32(xgb.Get32(buf[b:])) 6304 b += 4 6305 } 6306 6307 return v 6308 } 6309 6310 // Write request to wire for GetPixelMapfv 6311 // getPixelMapfvRequest writes a GetPixelMapfv request to a byte slice. 6312 func getPixelMapfvRequest(c *xgb.Conn, ContextTag ContextTag, Map uint32) []byte { 6313 size := 12 6314 b := 0 6315 buf := make([]byte, size) 6316 6317 c.ExtLock.RLock() 6318 buf[b] = c.Extensions["GLX"] 6319 c.ExtLock.RUnlock() 6320 b += 1 6321 6322 buf[b] = 125 // request opcode 6323 b += 1 6324 6325 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 6326 b += 2 6327 6328 xgb.Put32(buf[b:], uint32(ContextTag)) 6329 b += 4 6330 6331 xgb.Put32(buf[b:], Map) 6332 b += 4 6333 6334 return buf 6335 } 6336 6337 // GetPixelMapuivCookie is a cookie used only for GetPixelMapuiv requests. 6338 type GetPixelMapuivCookie struct { 6339 *xgb.Cookie 6340 } 6341 6342 // GetPixelMapuiv sends a checked request. 6343 // If an error occurs, it will be returned with the reply by calling GetPixelMapuivCookie.Reply() 6344 func GetPixelMapuiv(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapuivCookie { 6345 c.ExtLock.RLock() 6346 defer c.ExtLock.RUnlock() 6347 if _, ok := c.Extensions["GLX"]; !ok { 6348 panic("Cannot issue request 'GetPixelMapuiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6349 } 6350 cookie := c.NewCookie(true, true) 6351 c.NewRequest(getPixelMapuivRequest(c, ContextTag, Map), cookie) 6352 return GetPixelMapuivCookie{cookie} 6353 } 6354 6355 // GetPixelMapuivUnchecked sends an unchecked request. 6356 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 6357 func GetPixelMapuivUnchecked(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapuivCookie { 6358 c.ExtLock.RLock() 6359 defer c.ExtLock.RUnlock() 6360 if _, ok := c.Extensions["GLX"]; !ok { 6361 panic("Cannot issue request 'GetPixelMapuiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6362 } 6363 cookie := c.NewCookie(false, true) 6364 c.NewRequest(getPixelMapuivRequest(c, ContextTag, Map), cookie) 6365 return GetPixelMapuivCookie{cookie} 6366 } 6367 6368 // GetPixelMapuivReply represents the data returned from a GetPixelMapuiv request. 6369 type GetPixelMapuivReply struct { 6370 Sequence uint16 // sequence number of the request for this reply 6371 Length uint32 // number of bytes in this reply 6372 // padding: 1 bytes 6373 // padding: 4 bytes 6374 N uint32 6375 Datum uint32 6376 // padding: 12 bytes 6377 Data []uint32 // size: xgb.Pad((int(N) * 4)) 6378 } 6379 6380 // Reply blocks and returns the reply data for a GetPixelMapuiv request. 6381 func (cook GetPixelMapuivCookie) Reply() (*GetPixelMapuivReply, error) { 6382 buf, err := cook.Cookie.Reply() 6383 if err != nil { 6384 return nil, err 6385 } 6386 if buf == nil { 6387 return nil, nil 6388 } 6389 return getPixelMapuivReply(buf), nil 6390 } 6391 6392 // getPixelMapuivReply reads a byte slice into a GetPixelMapuivReply value. 6393 func getPixelMapuivReply(buf []byte) *GetPixelMapuivReply { 6394 v := new(GetPixelMapuivReply) 6395 b := 1 // skip reply determinant 6396 6397 b += 1 // padding 6398 6399 v.Sequence = xgb.Get16(buf[b:]) 6400 b += 2 6401 6402 v.Length = xgb.Get32(buf[b:]) // 4-byte units 6403 b += 4 6404 6405 b += 4 // padding 6406 6407 v.N = xgb.Get32(buf[b:]) 6408 b += 4 6409 6410 v.Datum = xgb.Get32(buf[b:]) 6411 b += 4 6412 6413 b += 12 // padding 6414 6415 v.Data = make([]uint32, v.N) 6416 for i := 0; i < int(v.N); i++ { 6417 v.Data[i] = xgb.Get32(buf[b:]) 6418 b += 4 6419 } 6420 6421 return v 6422 } 6423 6424 // Write request to wire for GetPixelMapuiv 6425 // getPixelMapuivRequest writes a GetPixelMapuiv request to a byte slice. 6426 func getPixelMapuivRequest(c *xgb.Conn, ContextTag ContextTag, Map uint32) []byte { 6427 size := 12 6428 b := 0 6429 buf := make([]byte, size) 6430 6431 c.ExtLock.RLock() 6432 buf[b] = c.Extensions["GLX"] 6433 c.ExtLock.RUnlock() 6434 b += 1 6435 6436 buf[b] = 126 // request opcode 6437 b += 1 6438 6439 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 6440 b += 2 6441 6442 xgb.Put32(buf[b:], uint32(ContextTag)) 6443 b += 4 6444 6445 xgb.Put32(buf[b:], Map) 6446 b += 4 6447 6448 return buf 6449 } 6450 6451 // GetPixelMapusvCookie is a cookie used only for GetPixelMapusv requests. 6452 type GetPixelMapusvCookie struct { 6453 *xgb.Cookie 6454 } 6455 6456 // GetPixelMapusv sends a checked request. 6457 // If an error occurs, it will be returned with the reply by calling GetPixelMapusvCookie.Reply() 6458 func GetPixelMapusv(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapusvCookie { 6459 c.ExtLock.RLock() 6460 defer c.ExtLock.RUnlock() 6461 if _, ok := c.Extensions["GLX"]; !ok { 6462 panic("Cannot issue request 'GetPixelMapusv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6463 } 6464 cookie := c.NewCookie(true, true) 6465 c.NewRequest(getPixelMapusvRequest(c, ContextTag, Map), cookie) 6466 return GetPixelMapusvCookie{cookie} 6467 } 6468 6469 // GetPixelMapusvUnchecked sends an unchecked request. 6470 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 6471 func GetPixelMapusvUnchecked(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapusvCookie { 6472 c.ExtLock.RLock() 6473 defer c.ExtLock.RUnlock() 6474 if _, ok := c.Extensions["GLX"]; !ok { 6475 panic("Cannot issue request 'GetPixelMapusv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6476 } 6477 cookie := c.NewCookie(false, true) 6478 c.NewRequest(getPixelMapusvRequest(c, ContextTag, Map), cookie) 6479 return GetPixelMapusvCookie{cookie} 6480 } 6481 6482 // GetPixelMapusvReply represents the data returned from a GetPixelMapusv request. 6483 type GetPixelMapusvReply struct { 6484 Sequence uint16 // sequence number of the request for this reply 6485 Length uint32 // number of bytes in this reply 6486 // padding: 1 bytes 6487 // padding: 4 bytes 6488 N uint32 6489 Datum uint16 6490 // padding: 16 bytes 6491 Data []uint16 // size: xgb.Pad((int(N) * 2)) 6492 } 6493 6494 // Reply blocks and returns the reply data for a GetPixelMapusv request. 6495 func (cook GetPixelMapusvCookie) Reply() (*GetPixelMapusvReply, error) { 6496 buf, err := cook.Cookie.Reply() 6497 if err != nil { 6498 return nil, err 6499 } 6500 if buf == nil { 6501 return nil, nil 6502 } 6503 return getPixelMapusvReply(buf), nil 6504 } 6505 6506 // getPixelMapusvReply reads a byte slice into a GetPixelMapusvReply value. 6507 func getPixelMapusvReply(buf []byte) *GetPixelMapusvReply { 6508 v := new(GetPixelMapusvReply) 6509 b := 1 // skip reply determinant 6510 6511 b += 1 // padding 6512 6513 v.Sequence = xgb.Get16(buf[b:]) 6514 b += 2 6515 6516 v.Length = xgb.Get32(buf[b:]) // 4-byte units 6517 b += 4 6518 6519 b += 4 // padding 6520 6521 v.N = xgb.Get32(buf[b:]) 6522 b += 4 6523 6524 v.Datum = xgb.Get16(buf[b:]) 6525 b += 2 6526 6527 b += 16 // padding 6528 6529 v.Data = make([]uint16, v.N) 6530 for i := 0; i < int(v.N); i++ { 6531 v.Data[i] = xgb.Get16(buf[b:]) 6532 b += 2 6533 } 6534 6535 return v 6536 } 6537 6538 // Write request to wire for GetPixelMapusv 6539 // getPixelMapusvRequest writes a GetPixelMapusv request to a byte slice. 6540 func getPixelMapusvRequest(c *xgb.Conn, ContextTag ContextTag, Map uint32) []byte { 6541 size := 12 6542 b := 0 6543 buf := make([]byte, size) 6544 6545 c.ExtLock.RLock() 6546 buf[b] = c.Extensions["GLX"] 6547 c.ExtLock.RUnlock() 6548 b += 1 6549 6550 buf[b] = 127 // request opcode 6551 b += 1 6552 6553 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 6554 b += 2 6555 6556 xgb.Put32(buf[b:], uint32(ContextTag)) 6557 b += 4 6558 6559 xgb.Put32(buf[b:], Map) 6560 b += 4 6561 6562 return buf 6563 } 6564 6565 // GetPolygonStippleCookie is a cookie used only for GetPolygonStipple requests. 6566 type GetPolygonStippleCookie struct { 6567 *xgb.Cookie 6568 } 6569 6570 // GetPolygonStipple sends a checked request. 6571 // If an error occurs, it will be returned with the reply by calling GetPolygonStippleCookie.Reply() 6572 func GetPolygonStipple(c *xgb.Conn, ContextTag ContextTag, LsbFirst bool) GetPolygonStippleCookie { 6573 c.ExtLock.RLock() 6574 defer c.ExtLock.RUnlock() 6575 if _, ok := c.Extensions["GLX"]; !ok { 6576 panic("Cannot issue request 'GetPolygonStipple' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6577 } 6578 cookie := c.NewCookie(true, true) 6579 c.NewRequest(getPolygonStippleRequest(c, ContextTag, LsbFirst), cookie) 6580 return GetPolygonStippleCookie{cookie} 6581 } 6582 6583 // GetPolygonStippleUnchecked sends an unchecked request. 6584 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 6585 func GetPolygonStippleUnchecked(c *xgb.Conn, ContextTag ContextTag, LsbFirst bool) GetPolygonStippleCookie { 6586 c.ExtLock.RLock() 6587 defer c.ExtLock.RUnlock() 6588 if _, ok := c.Extensions["GLX"]; !ok { 6589 panic("Cannot issue request 'GetPolygonStipple' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6590 } 6591 cookie := c.NewCookie(false, true) 6592 c.NewRequest(getPolygonStippleRequest(c, ContextTag, LsbFirst), cookie) 6593 return GetPolygonStippleCookie{cookie} 6594 } 6595 6596 // GetPolygonStippleReply represents the data returned from a GetPolygonStipple request. 6597 type GetPolygonStippleReply struct { 6598 Sequence uint16 // sequence number of the request for this reply 6599 Length uint32 // number of bytes in this reply 6600 // padding: 1 bytes 6601 // padding: 24 bytes 6602 Data []byte // size: xgb.Pad(((int(Length) * 4) * 1)) 6603 } 6604 6605 // Reply blocks and returns the reply data for a GetPolygonStipple request. 6606 func (cook GetPolygonStippleCookie) Reply() (*GetPolygonStippleReply, error) { 6607 buf, err := cook.Cookie.Reply() 6608 if err != nil { 6609 return nil, err 6610 } 6611 if buf == nil { 6612 return nil, nil 6613 } 6614 return getPolygonStippleReply(buf), nil 6615 } 6616 6617 // getPolygonStippleReply reads a byte slice into a GetPolygonStippleReply value. 6618 func getPolygonStippleReply(buf []byte) *GetPolygonStippleReply { 6619 v := new(GetPolygonStippleReply) 6620 b := 1 // skip reply determinant 6621 6622 b += 1 // padding 6623 6624 v.Sequence = xgb.Get16(buf[b:]) 6625 b += 2 6626 6627 v.Length = xgb.Get32(buf[b:]) // 4-byte units 6628 b += 4 6629 6630 b += 24 // padding 6631 6632 v.Data = make([]byte, (int(v.Length) * 4)) 6633 copy(v.Data[:(int(v.Length)*4)], buf[b:]) 6634 b += int((int(v.Length) * 4)) 6635 6636 return v 6637 } 6638 6639 // Write request to wire for GetPolygonStipple 6640 // getPolygonStippleRequest writes a GetPolygonStipple request to a byte slice. 6641 func getPolygonStippleRequest(c *xgb.Conn, ContextTag ContextTag, LsbFirst bool) []byte { 6642 size := 12 6643 b := 0 6644 buf := make([]byte, size) 6645 6646 c.ExtLock.RLock() 6647 buf[b] = c.Extensions["GLX"] 6648 c.ExtLock.RUnlock() 6649 b += 1 6650 6651 buf[b] = 128 // request opcode 6652 b += 1 6653 6654 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 6655 b += 2 6656 6657 xgb.Put32(buf[b:], uint32(ContextTag)) 6658 b += 4 6659 6660 if LsbFirst { 6661 buf[b] = 1 6662 } else { 6663 buf[b] = 0 6664 } 6665 b += 1 6666 6667 return buf 6668 } 6669 6670 // GetQueryObjectivARBCookie is a cookie used only for GetQueryObjectivARB requests. 6671 type GetQueryObjectivARBCookie struct { 6672 *xgb.Cookie 6673 } 6674 6675 // GetQueryObjectivARB sends a checked request. 6676 // If an error occurs, it will be returned with the reply by calling GetQueryObjectivARBCookie.Reply() 6677 func GetQueryObjectivARB(c *xgb.Conn, ContextTag ContextTag, Id uint32, Pname uint32) GetQueryObjectivARBCookie { 6678 c.ExtLock.RLock() 6679 defer c.ExtLock.RUnlock() 6680 if _, ok := c.Extensions["GLX"]; !ok { 6681 panic("Cannot issue request 'GetQueryObjectivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6682 } 6683 cookie := c.NewCookie(true, true) 6684 c.NewRequest(getQueryObjectivARBRequest(c, ContextTag, Id, Pname), cookie) 6685 return GetQueryObjectivARBCookie{cookie} 6686 } 6687 6688 // GetQueryObjectivARBUnchecked sends an unchecked request. 6689 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 6690 func GetQueryObjectivARBUnchecked(c *xgb.Conn, ContextTag ContextTag, Id uint32, Pname uint32) GetQueryObjectivARBCookie { 6691 c.ExtLock.RLock() 6692 defer c.ExtLock.RUnlock() 6693 if _, ok := c.Extensions["GLX"]; !ok { 6694 panic("Cannot issue request 'GetQueryObjectivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6695 } 6696 cookie := c.NewCookie(false, true) 6697 c.NewRequest(getQueryObjectivARBRequest(c, ContextTag, Id, Pname), cookie) 6698 return GetQueryObjectivARBCookie{cookie} 6699 } 6700 6701 // GetQueryObjectivARBReply represents the data returned from a GetQueryObjectivARB request. 6702 type GetQueryObjectivARBReply struct { 6703 Sequence uint16 // sequence number of the request for this reply 6704 Length uint32 // number of bytes in this reply 6705 // padding: 1 bytes 6706 // padding: 4 bytes 6707 N uint32 6708 Datum int32 6709 // padding: 12 bytes 6710 Data []int32 // size: xgb.Pad((int(N) * 4)) 6711 } 6712 6713 // Reply blocks and returns the reply data for a GetQueryObjectivARB request. 6714 func (cook GetQueryObjectivARBCookie) Reply() (*GetQueryObjectivARBReply, error) { 6715 buf, err := cook.Cookie.Reply() 6716 if err != nil { 6717 return nil, err 6718 } 6719 if buf == nil { 6720 return nil, nil 6721 } 6722 return getQueryObjectivARBReply(buf), nil 6723 } 6724 6725 // getQueryObjectivARBReply reads a byte slice into a GetQueryObjectivARBReply value. 6726 func getQueryObjectivARBReply(buf []byte) *GetQueryObjectivARBReply { 6727 v := new(GetQueryObjectivARBReply) 6728 b := 1 // skip reply determinant 6729 6730 b += 1 // padding 6731 6732 v.Sequence = xgb.Get16(buf[b:]) 6733 b += 2 6734 6735 v.Length = xgb.Get32(buf[b:]) // 4-byte units 6736 b += 4 6737 6738 b += 4 // padding 6739 6740 v.N = xgb.Get32(buf[b:]) 6741 b += 4 6742 6743 v.Datum = int32(xgb.Get32(buf[b:])) 6744 b += 4 6745 6746 b += 12 // padding 6747 6748 v.Data = make([]int32, v.N) 6749 for i := 0; i < int(v.N); i++ { 6750 v.Data[i] = int32(xgb.Get32(buf[b:])) 6751 b += 4 6752 } 6753 6754 return v 6755 } 6756 6757 // Write request to wire for GetQueryObjectivARB 6758 // getQueryObjectivARBRequest writes a GetQueryObjectivARB request to a byte slice. 6759 func getQueryObjectivARBRequest(c *xgb.Conn, ContextTag ContextTag, Id uint32, Pname uint32) []byte { 6760 size := 16 6761 b := 0 6762 buf := make([]byte, size) 6763 6764 c.ExtLock.RLock() 6765 buf[b] = c.Extensions["GLX"] 6766 c.ExtLock.RUnlock() 6767 b += 1 6768 6769 buf[b] = 165 // request opcode 6770 b += 1 6771 6772 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 6773 b += 2 6774 6775 xgb.Put32(buf[b:], uint32(ContextTag)) 6776 b += 4 6777 6778 xgb.Put32(buf[b:], Id) 6779 b += 4 6780 6781 xgb.Put32(buf[b:], Pname) 6782 b += 4 6783 6784 return buf 6785 } 6786 6787 // GetQueryObjectuivARBCookie is a cookie used only for GetQueryObjectuivARB requests. 6788 type GetQueryObjectuivARBCookie struct { 6789 *xgb.Cookie 6790 } 6791 6792 // GetQueryObjectuivARB sends a checked request. 6793 // If an error occurs, it will be returned with the reply by calling GetQueryObjectuivARBCookie.Reply() 6794 func GetQueryObjectuivARB(c *xgb.Conn, ContextTag ContextTag, Id uint32, Pname uint32) GetQueryObjectuivARBCookie { 6795 c.ExtLock.RLock() 6796 defer c.ExtLock.RUnlock() 6797 if _, ok := c.Extensions["GLX"]; !ok { 6798 panic("Cannot issue request 'GetQueryObjectuivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6799 } 6800 cookie := c.NewCookie(true, true) 6801 c.NewRequest(getQueryObjectuivARBRequest(c, ContextTag, Id, Pname), cookie) 6802 return GetQueryObjectuivARBCookie{cookie} 6803 } 6804 6805 // GetQueryObjectuivARBUnchecked sends an unchecked request. 6806 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 6807 func GetQueryObjectuivARBUnchecked(c *xgb.Conn, ContextTag ContextTag, Id uint32, Pname uint32) GetQueryObjectuivARBCookie { 6808 c.ExtLock.RLock() 6809 defer c.ExtLock.RUnlock() 6810 if _, ok := c.Extensions["GLX"]; !ok { 6811 panic("Cannot issue request 'GetQueryObjectuivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6812 } 6813 cookie := c.NewCookie(false, true) 6814 c.NewRequest(getQueryObjectuivARBRequest(c, ContextTag, Id, Pname), cookie) 6815 return GetQueryObjectuivARBCookie{cookie} 6816 } 6817 6818 // GetQueryObjectuivARBReply represents the data returned from a GetQueryObjectuivARB request. 6819 type GetQueryObjectuivARBReply struct { 6820 Sequence uint16 // sequence number of the request for this reply 6821 Length uint32 // number of bytes in this reply 6822 // padding: 1 bytes 6823 // padding: 4 bytes 6824 N uint32 6825 Datum uint32 6826 // padding: 12 bytes 6827 Data []uint32 // size: xgb.Pad((int(N) * 4)) 6828 } 6829 6830 // Reply blocks and returns the reply data for a GetQueryObjectuivARB request. 6831 func (cook GetQueryObjectuivARBCookie) Reply() (*GetQueryObjectuivARBReply, error) { 6832 buf, err := cook.Cookie.Reply() 6833 if err != nil { 6834 return nil, err 6835 } 6836 if buf == nil { 6837 return nil, nil 6838 } 6839 return getQueryObjectuivARBReply(buf), nil 6840 } 6841 6842 // getQueryObjectuivARBReply reads a byte slice into a GetQueryObjectuivARBReply value. 6843 func getQueryObjectuivARBReply(buf []byte) *GetQueryObjectuivARBReply { 6844 v := new(GetQueryObjectuivARBReply) 6845 b := 1 // skip reply determinant 6846 6847 b += 1 // padding 6848 6849 v.Sequence = xgb.Get16(buf[b:]) 6850 b += 2 6851 6852 v.Length = xgb.Get32(buf[b:]) // 4-byte units 6853 b += 4 6854 6855 b += 4 // padding 6856 6857 v.N = xgb.Get32(buf[b:]) 6858 b += 4 6859 6860 v.Datum = xgb.Get32(buf[b:]) 6861 b += 4 6862 6863 b += 12 // padding 6864 6865 v.Data = make([]uint32, v.N) 6866 for i := 0; i < int(v.N); i++ { 6867 v.Data[i] = xgb.Get32(buf[b:]) 6868 b += 4 6869 } 6870 6871 return v 6872 } 6873 6874 // Write request to wire for GetQueryObjectuivARB 6875 // getQueryObjectuivARBRequest writes a GetQueryObjectuivARB request to a byte slice. 6876 func getQueryObjectuivARBRequest(c *xgb.Conn, ContextTag ContextTag, Id uint32, Pname uint32) []byte { 6877 size := 16 6878 b := 0 6879 buf := make([]byte, size) 6880 6881 c.ExtLock.RLock() 6882 buf[b] = c.Extensions["GLX"] 6883 c.ExtLock.RUnlock() 6884 b += 1 6885 6886 buf[b] = 166 // request opcode 6887 b += 1 6888 6889 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 6890 b += 2 6891 6892 xgb.Put32(buf[b:], uint32(ContextTag)) 6893 b += 4 6894 6895 xgb.Put32(buf[b:], Id) 6896 b += 4 6897 6898 xgb.Put32(buf[b:], Pname) 6899 b += 4 6900 6901 return buf 6902 } 6903 6904 // GetQueryivARBCookie is a cookie used only for GetQueryivARB requests. 6905 type GetQueryivARBCookie struct { 6906 *xgb.Cookie 6907 } 6908 6909 // GetQueryivARB sends a checked request. 6910 // If an error occurs, it will be returned with the reply by calling GetQueryivARBCookie.Reply() 6911 func GetQueryivARB(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetQueryivARBCookie { 6912 c.ExtLock.RLock() 6913 defer c.ExtLock.RUnlock() 6914 if _, ok := c.Extensions["GLX"]; !ok { 6915 panic("Cannot issue request 'GetQueryivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6916 } 6917 cookie := c.NewCookie(true, true) 6918 c.NewRequest(getQueryivARBRequest(c, ContextTag, Target, Pname), cookie) 6919 return GetQueryivARBCookie{cookie} 6920 } 6921 6922 // GetQueryivARBUnchecked sends an unchecked request. 6923 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 6924 func GetQueryivARBUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetQueryivARBCookie { 6925 c.ExtLock.RLock() 6926 defer c.ExtLock.RUnlock() 6927 if _, ok := c.Extensions["GLX"]; !ok { 6928 panic("Cannot issue request 'GetQueryivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 6929 } 6930 cookie := c.NewCookie(false, true) 6931 c.NewRequest(getQueryivARBRequest(c, ContextTag, Target, Pname), cookie) 6932 return GetQueryivARBCookie{cookie} 6933 } 6934 6935 // GetQueryivARBReply represents the data returned from a GetQueryivARB request. 6936 type GetQueryivARBReply struct { 6937 Sequence uint16 // sequence number of the request for this reply 6938 Length uint32 // number of bytes in this reply 6939 // padding: 1 bytes 6940 // padding: 4 bytes 6941 N uint32 6942 Datum int32 6943 // padding: 12 bytes 6944 Data []int32 // size: xgb.Pad((int(N) * 4)) 6945 } 6946 6947 // Reply blocks and returns the reply data for a GetQueryivARB request. 6948 func (cook GetQueryivARBCookie) Reply() (*GetQueryivARBReply, error) { 6949 buf, err := cook.Cookie.Reply() 6950 if err != nil { 6951 return nil, err 6952 } 6953 if buf == nil { 6954 return nil, nil 6955 } 6956 return getQueryivARBReply(buf), nil 6957 } 6958 6959 // getQueryivARBReply reads a byte slice into a GetQueryivARBReply value. 6960 func getQueryivARBReply(buf []byte) *GetQueryivARBReply { 6961 v := new(GetQueryivARBReply) 6962 b := 1 // skip reply determinant 6963 6964 b += 1 // padding 6965 6966 v.Sequence = xgb.Get16(buf[b:]) 6967 b += 2 6968 6969 v.Length = xgb.Get32(buf[b:]) // 4-byte units 6970 b += 4 6971 6972 b += 4 // padding 6973 6974 v.N = xgb.Get32(buf[b:]) 6975 b += 4 6976 6977 v.Datum = int32(xgb.Get32(buf[b:])) 6978 b += 4 6979 6980 b += 12 // padding 6981 6982 v.Data = make([]int32, v.N) 6983 for i := 0; i < int(v.N); i++ { 6984 v.Data[i] = int32(xgb.Get32(buf[b:])) 6985 b += 4 6986 } 6987 6988 return v 6989 } 6990 6991 // Write request to wire for GetQueryivARB 6992 // getQueryivARBRequest writes a GetQueryivARB request to a byte slice. 6993 func getQueryivARBRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 6994 size := 16 6995 b := 0 6996 buf := make([]byte, size) 6997 6998 c.ExtLock.RLock() 6999 buf[b] = c.Extensions["GLX"] 7000 c.ExtLock.RUnlock() 7001 b += 1 7002 7003 buf[b] = 164 // request opcode 7004 b += 1 7005 7006 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 7007 b += 2 7008 7009 xgb.Put32(buf[b:], uint32(ContextTag)) 7010 b += 4 7011 7012 xgb.Put32(buf[b:], Target) 7013 b += 4 7014 7015 xgb.Put32(buf[b:], Pname) 7016 b += 4 7017 7018 return buf 7019 } 7020 7021 // GetSeparableFilterCookie is a cookie used only for GetSeparableFilter requests. 7022 type GetSeparableFilterCookie struct { 7023 *xgb.Cookie 7024 } 7025 7026 // GetSeparableFilter sends a checked request. 7027 // If an error occurs, it will be returned with the reply by calling GetSeparableFilterCookie.Reply() 7028 func GetSeparableFilter(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool) GetSeparableFilterCookie { 7029 c.ExtLock.RLock() 7030 defer c.ExtLock.RUnlock() 7031 if _, ok := c.Extensions["GLX"]; !ok { 7032 panic("Cannot issue request 'GetSeparableFilter' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7033 } 7034 cookie := c.NewCookie(true, true) 7035 c.NewRequest(getSeparableFilterRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie) 7036 return GetSeparableFilterCookie{cookie} 7037 } 7038 7039 // GetSeparableFilterUnchecked sends an unchecked request. 7040 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 7041 func GetSeparableFilterUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool) GetSeparableFilterCookie { 7042 c.ExtLock.RLock() 7043 defer c.ExtLock.RUnlock() 7044 if _, ok := c.Extensions["GLX"]; !ok { 7045 panic("Cannot issue request 'GetSeparableFilter' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7046 } 7047 cookie := c.NewCookie(false, true) 7048 c.NewRequest(getSeparableFilterRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie) 7049 return GetSeparableFilterCookie{cookie} 7050 } 7051 7052 // GetSeparableFilterReply represents the data returned from a GetSeparableFilter request. 7053 type GetSeparableFilterReply struct { 7054 Sequence uint16 // sequence number of the request for this reply 7055 Length uint32 // number of bytes in this reply 7056 // padding: 1 bytes 7057 // padding: 8 bytes 7058 RowW int32 7059 ColH int32 7060 // padding: 8 bytes 7061 RowsAndCols []byte // size: xgb.Pad(((int(Length) * 4) * 1)) 7062 } 7063 7064 // Reply blocks and returns the reply data for a GetSeparableFilter request. 7065 func (cook GetSeparableFilterCookie) Reply() (*GetSeparableFilterReply, error) { 7066 buf, err := cook.Cookie.Reply() 7067 if err != nil { 7068 return nil, err 7069 } 7070 if buf == nil { 7071 return nil, nil 7072 } 7073 return getSeparableFilterReply(buf), nil 7074 } 7075 7076 // getSeparableFilterReply reads a byte slice into a GetSeparableFilterReply value. 7077 func getSeparableFilterReply(buf []byte) *GetSeparableFilterReply { 7078 v := new(GetSeparableFilterReply) 7079 b := 1 // skip reply determinant 7080 7081 b += 1 // padding 7082 7083 v.Sequence = xgb.Get16(buf[b:]) 7084 b += 2 7085 7086 v.Length = xgb.Get32(buf[b:]) // 4-byte units 7087 b += 4 7088 7089 b += 8 // padding 7090 7091 v.RowW = int32(xgb.Get32(buf[b:])) 7092 b += 4 7093 7094 v.ColH = int32(xgb.Get32(buf[b:])) 7095 b += 4 7096 7097 b += 8 // padding 7098 7099 v.RowsAndCols = make([]byte, (int(v.Length) * 4)) 7100 copy(v.RowsAndCols[:(int(v.Length)*4)], buf[b:]) 7101 b += int((int(v.Length) * 4)) 7102 7103 return v 7104 } 7105 7106 // Write request to wire for GetSeparableFilter 7107 // getSeparableFilterRequest writes a GetSeparableFilter request to a byte slice. 7108 func getSeparableFilterRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Format uint32, Type uint32, SwapBytes bool) []byte { 7109 size := 24 7110 b := 0 7111 buf := make([]byte, size) 7112 7113 c.ExtLock.RLock() 7114 buf[b] = c.Extensions["GLX"] 7115 c.ExtLock.RUnlock() 7116 b += 1 7117 7118 buf[b] = 153 // request opcode 7119 b += 1 7120 7121 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 7122 b += 2 7123 7124 xgb.Put32(buf[b:], uint32(ContextTag)) 7125 b += 4 7126 7127 xgb.Put32(buf[b:], Target) 7128 b += 4 7129 7130 xgb.Put32(buf[b:], Format) 7131 b += 4 7132 7133 xgb.Put32(buf[b:], Type) 7134 b += 4 7135 7136 if SwapBytes { 7137 buf[b] = 1 7138 } else { 7139 buf[b] = 0 7140 } 7141 b += 1 7142 7143 return buf 7144 } 7145 7146 // GetStringCookie is a cookie used only for GetString requests. 7147 type GetStringCookie struct { 7148 *xgb.Cookie 7149 } 7150 7151 // GetString sends a checked request. 7152 // If an error occurs, it will be returned with the reply by calling GetStringCookie.Reply() 7153 func GetString(c *xgb.Conn, ContextTag ContextTag, Name uint32) GetStringCookie { 7154 c.ExtLock.RLock() 7155 defer c.ExtLock.RUnlock() 7156 if _, ok := c.Extensions["GLX"]; !ok { 7157 panic("Cannot issue request 'GetString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7158 } 7159 cookie := c.NewCookie(true, true) 7160 c.NewRequest(getStringRequest(c, ContextTag, Name), cookie) 7161 return GetStringCookie{cookie} 7162 } 7163 7164 // GetStringUnchecked sends an unchecked request. 7165 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 7166 func GetStringUnchecked(c *xgb.Conn, ContextTag ContextTag, Name uint32) GetStringCookie { 7167 c.ExtLock.RLock() 7168 defer c.ExtLock.RUnlock() 7169 if _, ok := c.Extensions["GLX"]; !ok { 7170 panic("Cannot issue request 'GetString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7171 } 7172 cookie := c.NewCookie(false, true) 7173 c.NewRequest(getStringRequest(c, ContextTag, Name), cookie) 7174 return GetStringCookie{cookie} 7175 } 7176 7177 // GetStringReply represents the data returned from a GetString request. 7178 type GetStringReply struct { 7179 Sequence uint16 // sequence number of the request for this reply 7180 Length uint32 // number of bytes in this reply 7181 // padding: 1 bytes 7182 // padding: 4 bytes 7183 N uint32 7184 // padding: 16 bytes 7185 String string // size: xgb.Pad((int(N) * 1)) 7186 } 7187 7188 // Reply blocks and returns the reply data for a GetString request. 7189 func (cook GetStringCookie) Reply() (*GetStringReply, error) { 7190 buf, err := cook.Cookie.Reply() 7191 if err != nil { 7192 return nil, err 7193 } 7194 if buf == nil { 7195 return nil, nil 7196 } 7197 return getStringReply(buf), nil 7198 } 7199 7200 // getStringReply reads a byte slice into a GetStringReply value. 7201 func getStringReply(buf []byte) *GetStringReply { 7202 v := new(GetStringReply) 7203 b := 1 // skip reply determinant 7204 7205 b += 1 // padding 7206 7207 v.Sequence = xgb.Get16(buf[b:]) 7208 b += 2 7209 7210 v.Length = xgb.Get32(buf[b:]) // 4-byte units 7211 b += 4 7212 7213 b += 4 // padding 7214 7215 v.N = xgb.Get32(buf[b:]) 7216 b += 4 7217 7218 b += 16 // padding 7219 7220 { 7221 byteString := make([]byte, v.N) 7222 copy(byteString[:v.N], buf[b:]) 7223 v.String = string(byteString) 7224 b += int(v.N) 7225 } 7226 7227 return v 7228 } 7229 7230 // Write request to wire for GetString 7231 // getStringRequest writes a GetString request to a byte slice. 7232 func getStringRequest(c *xgb.Conn, ContextTag ContextTag, Name uint32) []byte { 7233 size := 12 7234 b := 0 7235 buf := make([]byte, size) 7236 7237 c.ExtLock.RLock() 7238 buf[b] = c.Extensions["GLX"] 7239 c.ExtLock.RUnlock() 7240 b += 1 7241 7242 buf[b] = 129 // request opcode 7243 b += 1 7244 7245 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 7246 b += 2 7247 7248 xgb.Put32(buf[b:], uint32(ContextTag)) 7249 b += 4 7250 7251 xgb.Put32(buf[b:], Name) 7252 b += 4 7253 7254 return buf 7255 } 7256 7257 // GetTexEnvfvCookie is a cookie used only for GetTexEnvfv requests. 7258 type GetTexEnvfvCookie struct { 7259 *xgb.Cookie 7260 } 7261 7262 // GetTexEnvfv sends a checked request. 7263 // If an error occurs, it will be returned with the reply by calling GetTexEnvfvCookie.Reply() 7264 func GetTexEnvfv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetTexEnvfvCookie { 7265 c.ExtLock.RLock() 7266 defer c.ExtLock.RUnlock() 7267 if _, ok := c.Extensions["GLX"]; !ok { 7268 panic("Cannot issue request 'GetTexEnvfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7269 } 7270 cookie := c.NewCookie(true, true) 7271 c.NewRequest(getTexEnvfvRequest(c, ContextTag, Target, Pname), cookie) 7272 return GetTexEnvfvCookie{cookie} 7273 } 7274 7275 // GetTexEnvfvUnchecked sends an unchecked request. 7276 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 7277 func GetTexEnvfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetTexEnvfvCookie { 7278 c.ExtLock.RLock() 7279 defer c.ExtLock.RUnlock() 7280 if _, ok := c.Extensions["GLX"]; !ok { 7281 panic("Cannot issue request 'GetTexEnvfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7282 } 7283 cookie := c.NewCookie(false, true) 7284 c.NewRequest(getTexEnvfvRequest(c, ContextTag, Target, Pname), cookie) 7285 return GetTexEnvfvCookie{cookie} 7286 } 7287 7288 // GetTexEnvfvReply represents the data returned from a GetTexEnvfv request. 7289 type GetTexEnvfvReply struct { 7290 Sequence uint16 // sequence number of the request for this reply 7291 Length uint32 // number of bytes in this reply 7292 // padding: 1 bytes 7293 // padding: 4 bytes 7294 N uint32 7295 Datum Float32 7296 // padding: 12 bytes 7297 Data []Float32 // size: xgb.Pad((int(N) * 4)) 7298 } 7299 7300 // Reply blocks and returns the reply data for a GetTexEnvfv request. 7301 func (cook GetTexEnvfvCookie) Reply() (*GetTexEnvfvReply, error) { 7302 buf, err := cook.Cookie.Reply() 7303 if err != nil { 7304 return nil, err 7305 } 7306 if buf == nil { 7307 return nil, nil 7308 } 7309 return getTexEnvfvReply(buf), nil 7310 } 7311 7312 // getTexEnvfvReply reads a byte slice into a GetTexEnvfvReply value. 7313 func getTexEnvfvReply(buf []byte) *GetTexEnvfvReply { 7314 v := new(GetTexEnvfvReply) 7315 b := 1 // skip reply determinant 7316 7317 b += 1 // padding 7318 7319 v.Sequence = xgb.Get16(buf[b:]) 7320 b += 2 7321 7322 v.Length = xgb.Get32(buf[b:]) // 4-byte units 7323 b += 4 7324 7325 b += 4 // padding 7326 7327 v.N = xgb.Get32(buf[b:]) 7328 b += 4 7329 7330 v.Datum = Float32(xgb.Get32(buf[b:])) 7331 b += 4 7332 7333 b += 12 // padding 7334 7335 v.Data = make([]Float32, v.N) 7336 for i := 0; i < int(v.N); i++ { 7337 v.Data[i] = Float32(xgb.Get32(buf[b:])) 7338 b += 4 7339 } 7340 7341 return v 7342 } 7343 7344 // Write request to wire for GetTexEnvfv 7345 // getTexEnvfvRequest writes a GetTexEnvfv request to a byte slice. 7346 func getTexEnvfvRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 7347 size := 16 7348 b := 0 7349 buf := make([]byte, size) 7350 7351 c.ExtLock.RLock() 7352 buf[b] = c.Extensions["GLX"] 7353 c.ExtLock.RUnlock() 7354 b += 1 7355 7356 buf[b] = 130 // request opcode 7357 b += 1 7358 7359 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 7360 b += 2 7361 7362 xgb.Put32(buf[b:], uint32(ContextTag)) 7363 b += 4 7364 7365 xgb.Put32(buf[b:], Target) 7366 b += 4 7367 7368 xgb.Put32(buf[b:], Pname) 7369 b += 4 7370 7371 return buf 7372 } 7373 7374 // GetTexEnvivCookie is a cookie used only for GetTexEnviv requests. 7375 type GetTexEnvivCookie struct { 7376 *xgb.Cookie 7377 } 7378 7379 // GetTexEnviv sends a checked request. 7380 // If an error occurs, it will be returned with the reply by calling GetTexEnvivCookie.Reply() 7381 func GetTexEnviv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetTexEnvivCookie { 7382 c.ExtLock.RLock() 7383 defer c.ExtLock.RUnlock() 7384 if _, ok := c.Extensions["GLX"]; !ok { 7385 panic("Cannot issue request 'GetTexEnviv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7386 } 7387 cookie := c.NewCookie(true, true) 7388 c.NewRequest(getTexEnvivRequest(c, ContextTag, Target, Pname), cookie) 7389 return GetTexEnvivCookie{cookie} 7390 } 7391 7392 // GetTexEnvivUnchecked sends an unchecked request. 7393 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 7394 func GetTexEnvivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetTexEnvivCookie { 7395 c.ExtLock.RLock() 7396 defer c.ExtLock.RUnlock() 7397 if _, ok := c.Extensions["GLX"]; !ok { 7398 panic("Cannot issue request 'GetTexEnviv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7399 } 7400 cookie := c.NewCookie(false, true) 7401 c.NewRequest(getTexEnvivRequest(c, ContextTag, Target, Pname), cookie) 7402 return GetTexEnvivCookie{cookie} 7403 } 7404 7405 // GetTexEnvivReply represents the data returned from a GetTexEnviv request. 7406 type GetTexEnvivReply struct { 7407 Sequence uint16 // sequence number of the request for this reply 7408 Length uint32 // number of bytes in this reply 7409 // padding: 1 bytes 7410 // padding: 4 bytes 7411 N uint32 7412 Datum int32 7413 // padding: 12 bytes 7414 Data []int32 // size: xgb.Pad((int(N) * 4)) 7415 } 7416 7417 // Reply blocks and returns the reply data for a GetTexEnviv request. 7418 func (cook GetTexEnvivCookie) Reply() (*GetTexEnvivReply, error) { 7419 buf, err := cook.Cookie.Reply() 7420 if err != nil { 7421 return nil, err 7422 } 7423 if buf == nil { 7424 return nil, nil 7425 } 7426 return getTexEnvivReply(buf), nil 7427 } 7428 7429 // getTexEnvivReply reads a byte slice into a GetTexEnvivReply value. 7430 func getTexEnvivReply(buf []byte) *GetTexEnvivReply { 7431 v := new(GetTexEnvivReply) 7432 b := 1 // skip reply determinant 7433 7434 b += 1 // padding 7435 7436 v.Sequence = xgb.Get16(buf[b:]) 7437 b += 2 7438 7439 v.Length = xgb.Get32(buf[b:]) // 4-byte units 7440 b += 4 7441 7442 b += 4 // padding 7443 7444 v.N = xgb.Get32(buf[b:]) 7445 b += 4 7446 7447 v.Datum = int32(xgb.Get32(buf[b:])) 7448 b += 4 7449 7450 b += 12 // padding 7451 7452 v.Data = make([]int32, v.N) 7453 for i := 0; i < int(v.N); i++ { 7454 v.Data[i] = int32(xgb.Get32(buf[b:])) 7455 b += 4 7456 } 7457 7458 return v 7459 } 7460 7461 // Write request to wire for GetTexEnviv 7462 // getTexEnvivRequest writes a GetTexEnviv request to a byte slice. 7463 func getTexEnvivRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 7464 size := 16 7465 b := 0 7466 buf := make([]byte, size) 7467 7468 c.ExtLock.RLock() 7469 buf[b] = c.Extensions["GLX"] 7470 c.ExtLock.RUnlock() 7471 b += 1 7472 7473 buf[b] = 131 // request opcode 7474 b += 1 7475 7476 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 7477 b += 2 7478 7479 xgb.Put32(buf[b:], uint32(ContextTag)) 7480 b += 4 7481 7482 xgb.Put32(buf[b:], Target) 7483 b += 4 7484 7485 xgb.Put32(buf[b:], Pname) 7486 b += 4 7487 7488 return buf 7489 } 7490 7491 // GetTexGendvCookie is a cookie used only for GetTexGendv requests. 7492 type GetTexGendvCookie struct { 7493 *xgb.Cookie 7494 } 7495 7496 // GetTexGendv sends a checked request. 7497 // If an error occurs, it will be returned with the reply by calling GetTexGendvCookie.Reply() 7498 func GetTexGendv(c *xgb.Conn, ContextTag ContextTag, Coord uint32, Pname uint32) GetTexGendvCookie { 7499 c.ExtLock.RLock() 7500 defer c.ExtLock.RUnlock() 7501 if _, ok := c.Extensions["GLX"]; !ok { 7502 panic("Cannot issue request 'GetTexGendv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7503 } 7504 cookie := c.NewCookie(true, true) 7505 c.NewRequest(getTexGendvRequest(c, ContextTag, Coord, Pname), cookie) 7506 return GetTexGendvCookie{cookie} 7507 } 7508 7509 // GetTexGendvUnchecked sends an unchecked request. 7510 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 7511 func GetTexGendvUnchecked(c *xgb.Conn, ContextTag ContextTag, Coord uint32, Pname uint32) GetTexGendvCookie { 7512 c.ExtLock.RLock() 7513 defer c.ExtLock.RUnlock() 7514 if _, ok := c.Extensions["GLX"]; !ok { 7515 panic("Cannot issue request 'GetTexGendv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7516 } 7517 cookie := c.NewCookie(false, true) 7518 c.NewRequest(getTexGendvRequest(c, ContextTag, Coord, Pname), cookie) 7519 return GetTexGendvCookie{cookie} 7520 } 7521 7522 // GetTexGendvReply represents the data returned from a GetTexGendv request. 7523 type GetTexGendvReply struct { 7524 Sequence uint16 // sequence number of the request for this reply 7525 Length uint32 // number of bytes in this reply 7526 // padding: 1 bytes 7527 // padding: 4 bytes 7528 N uint32 7529 Datum Float64 7530 // padding: 8 bytes 7531 Data []Float64 // size: xgb.Pad((int(N) * 8)) 7532 } 7533 7534 // Reply blocks and returns the reply data for a GetTexGendv request. 7535 func (cook GetTexGendvCookie) Reply() (*GetTexGendvReply, error) { 7536 buf, err := cook.Cookie.Reply() 7537 if err != nil { 7538 return nil, err 7539 } 7540 if buf == nil { 7541 return nil, nil 7542 } 7543 return getTexGendvReply(buf), nil 7544 } 7545 7546 // getTexGendvReply reads a byte slice into a GetTexGendvReply value. 7547 func getTexGendvReply(buf []byte) *GetTexGendvReply { 7548 v := new(GetTexGendvReply) 7549 b := 1 // skip reply determinant 7550 7551 b += 1 // padding 7552 7553 v.Sequence = xgb.Get16(buf[b:]) 7554 b += 2 7555 7556 v.Length = xgb.Get32(buf[b:]) // 4-byte units 7557 b += 4 7558 7559 b += 4 // padding 7560 7561 v.N = xgb.Get32(buf[b:]) 7562 b += 4 7563 7564 v.Datum = Float64(xgb.Get64(buf[b:])) 7565 b += 8 7566 7567 b += 8 // padding 7568 7569 v.Data = make([]Float64, v.N) 7570 for i := 0; i < int(v.N); i++ { 7571 v.Data[i] = Float64(xgb.Get64(buf[b:])) 7572 b += 8 7573 } 7574 7575 return v 7576 } 7577 7578 // Write request to wire for GetTexGendv 7579 // getTexGendvRequest writes a GetTexGendv request to a byte slice. 7580 func getTexGendvRequest(c *xgb.Conn, ContextTag ContextTag, Coord uint32, Pname uint32) []byte { 7581 size := 16 7582 b := 0 7583 buf := make([]byte, size) 7584 7585 c.ExtLock.RLock() 7586 buf[b] = c.Extensions["GLX"] 7587 c.ExtLock.RUnlock() 7588 b += 1 7589 7590 buf[b] = 132 // request opcode 7591 b += 1 7592 7593 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 7594 b += 2 7595 7596 xgb.Put32(buf[b:], uint32(ContextTag)) 7597 b += 4 7598 7599 xgb.Put32(buf[b:], Coord) 7600 b += 4 7601 7602 xgb.Put32(buf[b:], Pname) 7603 b += 4 7604 7605 return buf 7606 } 7607 7608 // GetTexGenfvCookie is a cookie used only for GetTexGenfv requests. 7609 type GetTexGenfvCookie struct { 7610 *xgb.Cookie 7611 } 7612 7613 // GetTexGenfv sends a checked request. 7614 // If an error occurs, it will be returned with the reply by calling GetTexGenfvCookie.Reply() 7615 func GetTexGenfv(c *xgb.Conn, ContextTag ContextTag, Coord uint32, Pname uint32) GetTexGenfvCookie { 7616 c.ExtLock.RLock() 7617 defer c.ExtLock.RUnlock() 7618 if _, ok := c.Extensions["GLX"]; !ok { 7619 panic("Cannot issue request 'GetTexGenfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7620 } 7621 cookie := c.NewCookie(true, true) 7622 c.NewRequest(getTexGenfvRequest(c, ContextTag, Coord, Pname), cookie) 7623 return GetTexGenfvCookie{cookie} 7624 } 7625 7626 // GetTexGenfvUnchecked sends an unchecked request. 7627 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 7628 func GetTexGenfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Coord uint32, Pname uint32) GetTexGenfvCookie { 7629 c.ExtLock.RLock() 7630 defer c.ExtLock.RUnlock() 7631 if _, ok := c.Extensions["GLX"]; !ok { 7632 panic("Cannot issue request 'GetTexGenfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7633 } 7634 cookie := c.NewCookie(false, true) 7635 c.NewRequest(getTexGenfvRequest(c, ContextTag, Coord, Pname), cookie) 7636 return GetTexGenfvCookie{cookie} 7637 } 7638 7639 // GetTexGenfvReply represents the data returned from a GetTexGenfv request. 7640 type GetTexGenfvReply struct { 7641 Sequence uint16 // sequence number of the request for this reply 7642 Length uint32 // number of bytes in this reply 7643 // padding: 1 bytes 7644 // padding: 4 bytes 7645 N uint32 7646 Datum Float32 7647 // padding: 12 bytes 7648 Data []Float32 // size: xgb.Pad((int(N) * 4)) 7649 } 7650 7651 // Reply blocks and returns the reply data for a GetTexGenfv request. 7652 func (cook GetTexGenfvCookie) Reply() (*GetTexGenfvReply, error) { 7653 buf, err := cook.Cookie.Reply() 7654 if err != nil { 7655 return nil, err 7656 } 7657 if buf == nil { 7658 return nil, nil 7659 } 7660 return getTexGenfvReply(buf), nil 7661 } 7662 7663 // getTexGenfvReply reads a byte slice into a GetTexGenfvReply value. 7664 func getTexGenfvReply(buf []byte) *GetTexGenfvReply { 7665 v := new(GetTexGenfvReply) 7666 b := 1 // skip reply determinant 7667 7668 b += 1 // padding 7669 7670 v.Sequence = xgb.Get16(buf[b:]) 7671 b += 2 7672 7673 v.Length = xgb.Get32(buf[b:]) // 4-byte units 7674 b += 4 7675 7676 b += 4 // padding 7677 7678 v.N = xgb.Get32(buf[b:]) 7679 b += 4 7680 7681 v.Datum = Float32(xgb.Get32(buf[b:])) 7682 b += 4 7683 7684 b += 12 // padding 7685 7686 v.Data = make([]Float32, v.N) 7687 for i := 0; i < int(v.N); i++ { 7688 v.Data[i] = Float32(xgb.Get32(buf[b:])) 7689 b += 4 7690 } 7691 7692 return v 7693 } 7694 7695 // Write request to wire for GetTexGenfv 7696 // getTexGenfvRequest writes a GetTexGenfv request to a byte slice. 7697 func getTexGenfvRequest(c *xgb.Conn, ContextTag ContextTag, Coord uint32, Pname uint32) []byte { 7698 size := 16 7699 b := 0 7700 buf := make([]byte, size) 7701 7702 c.ExtLock.RLock() 7703 buf[b] = c.Extensions["GLX"] 7704 c.ExtLock.RUnlock() 7705 b += 1 7706 7707 buf[b] = 133 // request opcode 7708 b += 1 7709 7710 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 7711 b += 2 7712 7713 xgb.Put32(buf[b:], uint32(ContextTag)) 7714 b += 4 7715 7716 xgb.Put32(buf[b:], Coord) 7717 b += 4 7718 7719 xgb.Put32(buf[b:], Pname) 7720 b += 4 7721 7722 return buf 7723 } 7724 7725 // GetTexGenivCookie is a cookie used only for GetTexGeniv requests. 7726 type GetTexGenivCookie struct { 7727 *xgb.Cookie 7728 } 7729 7730 // GetTexGeniv sends a checked request. 7731 // If an error occurs, it will be returned with the reply by calling GetTexGenivCookie.Reply() 7732 func GetTexGeniv(c *xgb.Conn, ContextTag ContextTag, Coord uint32, Pname uint32) GetTexGenivCookie { 7733 c.ExtLock.RLock() 7734 defer c.ExtLock.RUnlock() 7735 if _, ok := c.Extensions["GLX"]; !ok { 7736 panic("Cannot issue request 'GetTexGeniv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7737 } 7738 cookie := c.NewCookie(true, true) 7739 c.NewRequest(getTexGenivRequest(c, ContextTag, Coord, Pname), cookie) 7740 return GetTexGenivCookie{cookie} 7741 } 7742 7743 // GetTexGenivUnchecked sends an unchecked request. 7744 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 7745 func GetTexGenivUnchecked(c *xgb.Conn, ContextTag ContextTag, Coord uint32, Pname uint32) GetTexGenivCookie { 7746 c.ExtLock.RLock() 7747 defer c.ExtLock.RUnlock() 7748 if _, ok := c.Extensions["GLX"]; !ok { 7749 panic("Cannot issue request 'GetTexGeniv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7750 } 7751 cookie := c.NewCookie(false, true) 7752 c.NewRequest(getTexGenivRequest(c, ContextTag, Coord, Pname), cookie) 7753 return GetTexGenivCookie{cookie} 7754 } 7755 7756 // GetTexGenivReply represents the data returned from a GetTexGeniv request. 7757 type GetTexGenivReply struct { 7758 Sequence uint16 // sequence number of the request for this reply 7759 Length uint32 // number of bytes in this reply 7760 // padding: 1 bytes 7761 // padding: 4 bytes 7762 N uint32 7763 Datum int32 7764 // padding: 12 bytes 7765 Data []int32 // size: xgb.Pad((int(N) * 4)) 7766 } 7767 7768 // Reply blocks and returns the reply data for a GetTexGeniv request. 7769 func (cook GetTexGenivCookie) Reply() (*GetTexGenivReply, error) { 7770 buf, err := cook.Cookie.Reply() 7771 if err != nil { 7772 return nil, err 7773 } 7774 if buf == nil { 7775 return nil, nil 7776 } 7777 return getTexGenivReply(buf), nil 7778 } 7779 7780 // getTexGenivReply reads a byte slice into a GetTexGenivReply value. 7781 func getTexGenivReply(buf []byte) *GetTexGenivReply { 7782 v := new(GetTexGenivReply) 7783 b := 1 // skip reply determinant 7784 7785 b += 1 // padding 7786 7787 v.Sequence = xgb.Get16(buf[b:]) 7788 b += 2 7789 7790 v.Length = xgb.Get32(buf[b:]) // 4-byte units 7791 b += 4 7792 7793 b += 4 // padding 7794 7795 v.N = xgb.Get32(buf[b:]) 7796 b += 4 7797 7798 v.Datum = int32(xgb.Get32(buf[b:])) 7799 b += 4 7800 7801 b += 12 // padding 7802 7803 v.Data = make([]int32, v.N) 7804 for i := 0; i < int(v.N); i++ { 7805 v.Data[i] = int32(xgb.Get32(buf[b:])) 7806 b += 4 7807 } 7808 7809 return v 7810 } 7811 7812 // Write request to wire for GetTexGeniv 7813 // getTexGenivRequest writes a GetTexGeniv request to a byte slice. 7814 func getTexGenivRequest(c *xgb.Conn, ContextTag ContextTag, Coord uint32, Pname uint32) []byte { 7815 size := 16 7816 b := 0 7817 buf := make([]byte, size) 7818 7819 c.ExtLock.RLock() 7820 buf[b] = c.Extensions["GLX"] 7821 c.ExtLock.RUnlock() 7822 b += 1 7823 7824 buf[b] = 134 // request opcode 7825 b += 1 7826 7827 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 7828 b += 2 7829 7830 xgb.Put32(buf[b:], uint32(ContextTag)) 7831 b += 4 7832 7833 xgb.Put32(buf[b:], Coord) 7834 b += 4 7835 7836 xgb.Put32(buf[b:], Pname) 7837 b += 4 7838 7839 return buf 7840 } 7841 7842 // GetTexImageCookie is a cookie used only for GetTexImage requests. 7843 type GetTexImageCookie struct { 7844 *xgb.Cookie 7845 } 7846 7847 // GetTexImage sends a checked request. 7848 // If an error occurs, it will be returned with the reply by calling GetTexImageCookie.Reply() 7849 func GetTexImage(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Format uint32, Type uint32, SwapBytes bool) GetTexImageCookie { 7850 c.ExtLock.RLock() 7851 defer c.ExtLock.RUnlock() 7852 if _, ok := c.Extensions["GLX"]; !ok { 7853 panic("Cannot issue request 'GetTexImage' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7854 } 7855 cookie := c.NewCookie(true, true) 7856 c.NewRequest(getTexImageRequest(c, ContextTag, Target, Level, Format, Type, SwapBytes), cookie) 7857 return GetTexImageCookie{cookie} 7858 } 7859 7860 // GetTexImageUnchecked sends an unchecked request. 7861 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 7862 func GetTexImageUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Format uint32, Type uint32, SwapBytes bool) GetTexImageCookie { 7863 c.ExtLock.RLock() 7864 defer c.ExtLock.RUnlock() 7865 if _, ok := c.Extensions["GLX"]; !ok { 7866 panic("Cannot issue request 'GetTexImage' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7867 } 7868 cookie := c.NewCookie(false, true) 7869 c.NewRequest(getTexImageRequest(c, ContextTag, Target, Level, Format, Type, SwapBytes), cookie) 7870 return GetTexImageCookie{cookie} 7871 } 7872 7873 // GetTexImageReply represents the data returned from a GetTexImage request. 7874 type GetTexImageReply struct { 7875 Sequence uint16 // sequence number of the request for this reply 7876 Length uint32 // number of bytes in this reply 7877 // padding: 1 bytes 7878 // padding: 8 bytes 7879 Width int32 7880 Height int32 7881 Depth int32 7882 // padding: 4 bytes 7883 Data []byte // size: xgb.Pad(((int(Length) * 4) * 1)) 7884 } 7885 7886 // Reply blocks and returns the reply data for a GetTexImage request. 7887 func (cook GetTexImageCookie) Reply() (*GetTexImageReply, error) { 7888 buf, err := cook.Cookie.Reply() 7889 if err != nil { 7890 return nil, err 7891 } 7892 if buf == nil { 7893 return nil, nil 7894 } 7895 return getTexImageReply(buf), nil 7896 } 7897 7898 // getTexImageReply reads a byte slice into a GetTexImageReply value. 7899 func getTexImageReply(buf []byte) *GetTexImageReply { 7900 v := new(GetTexImageReply) 7901 b := 1 // skip reply determinant 7902 7903 b += 1 // padding 7904 7905 v.Sequence = xgb.Get16(buf[b:]) 7906 b += 2 7907 7908 v.Length = xgb.Get32(buf[b:]) // 4-byte units 7909 b += 4 7910 7911 b += 8 // padding 7912 7913 v.Width = int32(xgb.Get32(buf[b:])) 7914 b += 4 7915 7916 v.Height = int32(xgb.Get32(buf[b:])) 7917 b += 4 7918 7919 v.Depth = int32(xgb.Get32(buf[b:])) 7920 b += 4 7921 7922 b += 4 // padding 7923 7924 v.Data = make([]byte, (int(v.Length) * 4)) 7925 copy(v.Data[:(int(v.Length)*4)], buf[b:]) 7926 b += int((int(v.Length) * 4)) 7927 7928 return v 7929 } 7930 7931 // Write request to wire for GetTexImage 7932 // getTexImageRequest writes a GetTexImage request to a byte slice. 7933 func getTexImageRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Format uint32, Type uint32, SwapBytes bool) []byte { 7934 size := 28 7935 b := 0 7936 buf := make([]byte, size) 7937 7938 c.ExtLock.RLock() 7939 buf[b] = c.Extensions["GLX"] 7940 c.ExtLock.RUnlock() 7941 b += 1 7942 7943 buf[b] = 135 // request opcode 7944 b += 1 7945 7946 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 7947 b += 2 7948 7949 xgb.Put32(buf[b:], uint32(ContextTag)) 7950 b += 4 7951 7952 xgb.Put32(buf[b:], Target) 7953 b += 4 7954 7955 xgb.Put32(buf[b:], uint32(Level)) 7956 b += 4 7957 7958 xgb.Put32(buf[b:], Format) 7959 b += 4 7960 7961 xgb.Put32(buf[b:], Type) 7962 b += 4 7963 7964 if SwapBytes { 7965 buf[b] = 1 7966 } else { 7967 buf[b] = 0 7968 } 7969 b += 1 7970 7971 return buf 7972 } 7973 7974 // GetTexLevelParameterfvCookie is a cookie used only for GetTexLevelParameterfv requests. 7975 type GetTexLevelParameterfvCookie struct { 7976 *xgb.Cookie 7977 } 7978 7979 // GetTexLevelParameterfv sends a checked request. 7980 // If an error occurs, it will be returned with the reply by calling GetTexLevelParameterfvCookie.Reply() 7981 func GetTexLevelParameterfv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) GetTexLevelParameterfvCookie { 7982 c.ExtLock.RLock() 7983 defer c.ExtLock.RUnlock() 7984 if _, ok := c.Extensions["GLX"]; !ok { 7985 panic("Cannot issue request 'GetTexLevelParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7986 } 7987 cookie := c.NewCookie(true, true) 7988 c.NewRequest(getTexLevelParameterfvRequest(c, ContextTag, Target, Level, Pname), cookie) 7989 return GetTexLevelParameterfvCookie{cookie} 7990 } 7991 7992 // GetTexLevelParameterfvUnchecked sends an unchecked request. 7993 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 7994 func GetTexLevelParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) GetTexLevelParameterfvCookie { 7995 c.ExtLock.RLock() 7996 defer c.ExtLock.RUnlock() 7997 if _, ok := c.Extensions["GLX"]; !ok { 7998 panic("Cannot issue request 'GetTexLevelParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 7999 } 8000 cookie := c.NewCookie(false, true) 8001 c.NewRequest(getTexLevelParameterfvRequest(c, ContextTag, Target, Level, Pname), cookie) 8002 return GetTexLevelParameterfvCookie{cookie} 8003 } 8004 8005 // GetTexLevelParameterfvReply represents the data returned from a GetTexLevelParameterfv request. 8006 type GetTexLevelParameterfvReply struct { 8007 Sequence uint16 // sequence number of the request for this reply 8008 Length uint32 // number of bytes in this reply 8009 // padding: 1 bytes 8010 // padding: 4 bytes 8011 N uint32 8012 Datum Float32 8013 // padding: 12 bytes 8014 Data []Float32 // size: xgb.Pad((int(N) * 4)) 8015 } 8016 8017 // Reply blocks and returns the reply data for a GetTexLevelParameterfv request. 8018 func (cook GetTexLevelParameterfvCookie) Reply() (*GetTexLevelParameterfvReply, error) { 8019 buf, err := cook.Cookie.Reply() 8020 if err != nil { 8021 return nil, err 8022 } 8023 if buf == nil { 8024 return nil, nil 8025 } 8026 return getTexLevelParameterfvReply(buf), nil 8027 } 8028 8029 // getTexLevelParameterfvReply reads a byte slice into a GetTexLevelParameterfvReply value. 8030 func getTexLevelParameterfvReply(buf []byte) *GetTexLevelParameterfvReply { 8031 v := new(GetTexLevelParameterfvReply) 8032 b := 1 // skip reply determinant 8033 8034 b += 1 // padding 8035 8036 v.Sequence = xgb.Get16(buf[b:]) 8037 b += 2 8038 8039 v.Length = xgb.Get32(buf[b:]) // 4-byte units 8040 b += 4 8041 8042 b += 4 // padding 8043 8044 v.N = xgb.Get32(buf[b:]) 8045 b += 4 8046 8047 v.Datum = Float32(xgb.Get32(buf[b:])) 8048 b += 4 8049 8050 b += 12 // padding 8051 8052 v.Data = make([]Float32, v.N) 8053 for i := 0; i < int(v.N); i++ { 8054 v.Data[i] = Float32(xgb.Get32(buf[b:])) 8055 b += 4 8056 } 8057 8058 return v 8059 } 8060 8061 // Write request to wire for GetTexLevelParameterfv 8062 // getTexLevelParameterfvRequest writes a GetTexLevelParameterfv request to a byte slice. 8063 func getTexLevelParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) []byte { 8064 size := 20 8065 b := 0 8066 buf := make([]byte, size) 8067 8068 c.ExtLock.RLock() 8069 buf[b] = c.Extensions["GLX"] 8070 c.ExtLock.RUnlock() 8071 b += 1 8072 8073 buf[b] = 138 // request opcode 8074 b += 1 8075 8076 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 8077 b += 2 8078 8079 xgb.Put32(buf[b:], uint32(ContextTag)) 8080 b += 4 8081 8082 xgb.Put32(buf[b:], Target) 8083 b += 4 8084 8085 xgb.Put32(buf[b:], uint32(Level)) 8086 b += 4 8087 8088 xgb.Put32(buf[b:], Pname) 8089 b += 4 8090 8091 return buf 8092 } 8093 8094 // GetTexLevelParameterivCookie is a cookie used only for GetTexLevelParameteriv requests. 8095 type GetTexLevelParameterivCookie struct { 8096 *xgb.Cookie 8097 } 8098 8099 // GetTexLevelParameteriv sends a checked request. 8100 // If an error occurs, it will be returned with the reply by calling GetTexLevelParameterivCookie.Reply() 8101 func GetTexLevelParameteriv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) GetTexLevelParameterivCookie { 8102 c.ExtLock.RLock() 8103 defer c.ExtLock.RUnlock() 8104 if _, ok := c.Extensions["GLX"]; !ok { 8105 panic("Cannot issue request 'GetTexLevelParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8106 } 8107 cookie := c.NewCookie(true, true) 8108 c.NewRequest(getTexLevelParameterivRequest(c, ContextTag, Target, Level, Pname), cookie) 8109 return GetTexLevelParameterivCookie{cookie} 8110 } 8111 8112 // GetTexLevelParameterivUnchecked sends an unchecked request. 8113 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 8114 func GetTexLevelParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) GetTexLevelParameterivCookie { 8115 c.ExtLock.RLock() 8116 defer c.ExtLock.RUnlock() 8117 if _, ok := c.Extensions["GLX"]; !ok { 8118 panic("Cannot issue request 'GetTexLevelParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8119 } 8120 cookie := c.NewCookie(false, true) 8121 c.NewRequest(getTexLevelParameterivRequest(c, ContextTag, Target, Level, Pname), cookie) 8122 return GetTexLevelParameterivCookie{cookie} 8123 } 8124 8125 // GetTexLevelParameterivReply represents the data returned from a GetTexLevelParameteriv request. 8126 type GetTexLevelParameterivReply struct { 8127 Sequence uint16 // sequence number of the request for this reply 8128 Length uint32 // number of bytes in this reply 8129 // padding: 1 bytes 8130 // padding: 4 bytes 8131 N uint32 8132 Datum int32 8133 // padding: 12 bytes 8134 Data []int32 // size: xgb.Pad((int(N) * 4)) 8135 } 8136 8137 // Reply blocks and returns the reply data for a GetTexLevelParameteriv request. 8138 func (cook GetTexLevelParameterivCookie) Reply() (*GetTexLevelParameterivReply, error) { 8139 buf, err := cook.Cookie.Reply() 8140 if err != nil { 8141 return nil, err 8142 } 8143 if buf == nil { 8144 return nil, nil 8145 } 8146 return getTexLevelParameterivReply(buf), nil 8147 } 8148 8149 // getTexLevelParameterivReply reads a byte slice into a GetTexLevelParameterivReply value. 8150 func getTexLevelParameterivReply(buf []byte) *GetTexLevelParameterivReply { 8151 v := new(GetTexLevelParameterivReply) 8152 b := 1 // skip reply determinant 8153 8154 b += 1 // padding 8155 8156 v.Sequence = xgb.Get16(buf[b:]) 8157 b += 2 8158 8159 v.Length = xgb.Get32(buf[b:]) // 4-byte units 8160 b += 4 8161 8162 b += 4 // padding 8163 8164 v.N = xgb.Get32(buf[b:]) 8165 b += 4 8166 8167 v.Datum = int32(xgb.Get32(buf[b:])) 8168 b += 4 8169 8170 b += 12 // padding 8171 8172 v.Data = make([]int32, v.N) 8173 for i := 0; i < int(v.N); i++ { 8174 v.Data[i] = int32(xgb.Get32(buf[b:])) 8175 b += 4 8176 } 8177 8178 return v 8179 } 8180 8181 // Write request to wire for GetTexLevelParameteriv 8182 // getTexLevelParameterivRequest writes a GetTexLevelParameteriv request to a byte slice. 8183 func getTexLevelParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) []byte { 8184 size := 20 8185 b := 0 8186 buf := make([]byte, size) 8187 8188 c.ExtLock.RLock() 8189 buf[b] = c.Extensions["GLX"] 8190 c.ExtLock.RUnlock() 8191 b += 1 8192 8193 buf[b] = 139 // request opcode 8194 b += 1 8195 8196 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 8197 b += 2 8198 8199 xgb.Put32(buf[b:], uint32(ContextTag)) 8200 b += 4 8201 8202 xgb.Put32(buf[b:], Target) 8203 b += 4 8204 8205 xgb.Put32(buf[b:], uint32(Level)) 8206 b += 4 8207 8208 xgb.Put32(buf[b:], Pname) 8209 b += 4 8210 8211 return buf 8212 } 8213 8214 // GetTexParameterfvCookie is a cookie used only for GetTexParameterfv requests. 8215 type GetTexParameterfvCookie struct { 8216 *xgb.Cookie 8217 } 8218 8219 // GetTexParameterfv sends a checked request. 8220 // If an error occurs, it will be returned with the reply by calling GetTexParameterfvCookie.Reply() 8221 func GetTexParameterfv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetTexParameterfvCookie { 8222 c.ExtLock.RLock() 8223 defer c.ExtLock.RUnlock() 8224 if _, ok := c.Extensions["GLX"]; !ok { 8225 panic("Cannot issue request 'GetTexParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8226 } 8227 cookie := c.NewCookie(true, true) 8228 c.NewRequest(getTexParameterfvRequest(c, ContextTag, Target, Pname), cookie) 8229 return GetTexParameterfvCookie{cookie} 8230 } 8231 8232 // GetTexParameterfvUnchecked sends an unchecked request. 8233 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 8234 func GetTexParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetTexParameterfvCookie { 8235 c.ExtLock.RLock() 8236 defer c.ExtLock.RUnlock() 8237 if _, ok := c.Extensions["GLX"]; !ok { 8238 panic("Cannot issue request 'GetTexParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8239 } 8240 cookie := c.NewCookie(false, true) 8241 c.NewRequest(getTexParameterfvRequest(c, ContextTag, Target, Pname), cookie) 8242 return GetTexParameterfvCookie{cookie} 8243 } 8244 8245 // GetTexParameterfvReply represents the data returned from a GetTexParameterfv request. 8246 type GetTexParameterfvReply struct { 8247 Sequence uint16 // sequence number of the request for this reply 8248 Length uint32 // number of bytes in this reply 8249 // padding: 1 bytes 8250 // padding: 4 bytes 8251 N uint32 8252 Datum Float32 8253 // padding: 12 bytes 8254 Data []Float32 // size: xgb.Pad((int(N) * 4)) 8255 } 8256 8257 // Reply blocks and returns the reply data for a GetTexParameterfv request. 8258 func (cook GetTexParameterfvCookie) Reply() (*GetTexParameterfvReply, error) { 8259 buf, err := cook.Cookie.Reply() 8260 if err != nil { 8261 return nil, err 8262 } 8263 if buf == nil { 8264 return nil, nil 8265 } 8266 return getTexParameterfvReply(buf), nil 8267 } 8268 8269 // getTexParameterfvReply reads a byte slice into a GetTexParameterfvReply value. 8270 func getTexParameterfvReply(buf []byte) *GetTexParameterfvReply { 8271 v := new(GetTexParameterfvReply) 8272 b := 1 // skip reply determinant 8273 8274 b += 1 // padding 8275 8276 v.Sequence = xgb.Get16(buf[b:]) 8277 b += 2 8278 8279 v.Length = xgb.Get32(buf[b:]) // 4-byte units 8280 b += 4 8281 8282 b += 4 // padding 8283 8284 v.N = xgb.Get32(buf[b:]) 8285 b += 4 8286 8287 v.Datum = Float32(xgb.Get32(buf[b:])) 8288 b += 4 8289 8290 b += 12 // padding 8291 8292 v.Data = make([]Float32, v.N) 8293 for i := 0; i < int(v.N); i++ { 8294 v.Data[i] = Float32(xgb.Get32(buf[b:])) 8295 b += 4 8296 } 8297 8298 return v 8299 } 8300 8301 // Write request to wire for GetTexParameterfv 8302 // getTexParameterfvRequest writes a GetTexParameterfv request to a byte slice. 8303 func getTexParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 8304 size := 16 8305 b := 0 8306 buf := make([]byte, size) 8307 8308 c.ExtLock.RLock() 8309 buf[b] = c.Extensions["GLX"] 8310 c.ExtLock.RUnlock() 8311 b += 1 8312 8313 buf[b] = 136 // request opcode 8314 b += 1 8315 8316 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 8317 b += 2 8318 8319 xgb.Put32(buf[b:], uint32(ContextTag)) 8320 b += 4 8321 8322 xgb.Put32(buf[b:], Target) 8323 b += 4 8324 8325 xgb.Put32(buf[b:], Pname) 8326 b += 4 8327 8328 return buf 8329 } 8330 8331 // GetTexParameterivCookie is a cookie used only for GetTexParameteriv requests. 8332 type GetTexParameterivCookie struct { 8333 *xgb.Cookie 8334 } 8335 8336 // GetTexParameteriv sends a checked request. 8337 // If an error occurs, it will be returned with the reply by calling GetTexParameterivCookie.Reply() 8338 func GetTexParameteriv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetTexParameterivCookie { 8339 c.ExtLock.RLock() 8340 defer c.ExtLock.RUnlock() 8341 if _, ok := c.Extensions["GLX"]; !ok { 8342 panic("Cannot issue request 'GetTexParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8343 } 8344 cookie := c.NewCookie(true, true) 8345 c.NewRequest(getTexParameterivRequest(c, ContextTag, Target, Pname), cookie) 8346 return GetTexParameterivCookie{cookie} 8347 } 8348 8349 // GetTexParameterivUnchecked sends an unchecked request. 8350 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 8351 func GetTexParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) GetTexParameterivCookie { 8352 c.ExtLock.RLock() 8353 defer c.ExtLock.RUnlock() 8354 if _, ok := c.Extensions["GLX"]; !ok { 8355 panic("Cannot issue request 'GetTexParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8356 } 8357 cookie := c.NewCookie(false, true) 8358 c.NewRequest(getTexParameterivRequest(c, ContextTag, Target, Pname), cookie) 8359 return GetTexParameterivCookie{cookie} 8360 } 8361 8362 // GetTexParameterivReply represents the data returned from a GetTexParameteriv request. 8363 type GetTexParameterivReply struct { 8364 Sequence uint16 // sequence number of the request for this reply 8365 Length uint32 // number of bytes in this reply 8366 // padding: 1 bytes 8367 // padding: 4 bytes 8368 N uint32 8369 Datum int32 8370 // padding: 12 bytes 8371 Data []int32 // size: xgb.Pad((int(N) * 4)) 8372 } 8373 8374 // Reply blocks and returns the reply data for a GetTexParameteriv request. 8375 func (cook GetTexParameterivCookie) Reply() (*GetTexParameterivReply, error) { 8376 buf, err := cook.Cookie.Reply() 8377 if err != nil { 8378 return nil, err 8379 } 8380 if buf == nil { 8381 return nil, nil 8382 } 8383 return getTexParameterivReply(buf), nil 8384 } 8385 8386 // getTexParameterivReply reads a byte slice into a GetTexParameterivReply value. 8387 func getTexParameterivReply(buf []byte) *GetTexParameterivReply { 8388 v := new(GetTexParameterivReply) 8389 b := 1 // skip reply determinant 8390 8391 b += 1 // padding 8392 8393 v.Sequence = xgb.Get16(buf[b:]) 8394 b += 2 8395 8396 v.Length = xgb.Get32(buf[b:]) // 4-byte units 8397 b += 4 8398 8399 b += 4 // padding 8400 8401 v.N = xgb.Get32(buf[b:]) 8402 b += 4 8403 8404 v.Datum = int32(xgb.Get32(buf[b:])) 8405 b += 4 8406 8407 b += 12 // padding 8408 8409 v.Data = make([]int32, v.N) 8410 for i := 0; i < int(v.N); i++ { 8411 v.Data[i] = int32(xgb.Get32(buf[b:])) 8412 b += 4 8413 } 8414 8415 return v 8416 } 8417 8418 // Write request to wire for GetTexParameteriv 8419 // getTexParameterivRequest writes a GetTexParameteriv request to a byte slice. 8420 func getTexParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Pname uint32) []byte { 8421 size := 16 8422 b := 0 8423 buf := make([]byte, size) 8424 8425 c.ExtLock.RLock() 8426 buf[b] = c.Extensions["GLX"] 8427 c.ExtLock.RUnlock() 8428 b += 1 8429 8430 buf[b] = 137 // request opcode 8431 b += 1 8432 8433 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 8434 b += 2 8435 8436 xgb.Put32(buf[b:], uint32(ContextTag)) 8437 b += 4 8438 8439 xgb.Put32(buf[b:], Target) 8440 b += 4 8441 8442 xgb.Put32(buf[b:], Pname) 8443 b += 4 8444 8445 return buf 8446 } 8447 8448 // GetVisualConfigsCookie is a cookie used only for GetVisualConfigs requests. 8449 type GetVisualConfigsCookie struct { 8450 *xgb.Cookie 8451 } 8452 8453 // GetVisualConfigs sends a checked request. 8454 // If an error occurs, it will be returned with the reply by calling GetVisualConfigsCookie.Reply() 8455 func GetVisualConfigs(c *xgb.Conn, Screen uint32) GetVisualConfigsCookie { 8456 c.ExtLock.RLock() 8457 defer c.ExtLock.RUnlock() 8458 if _, ok := c.Extensions["GLX"]; !ok { 8459 panic("Cannot issue request 'GetVisualConfigs' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8460 } 8461 cookie := c.NewCookie(true, true) 8462 c.NewRequest(getVisualConfigsRequest(c, Screen), cookie) 8463 return GetVisualConfigsCookie{cookie} 8464 } 8465 8466 // GetVisualConfigsUnchecked sends an unchecked request. 8467 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 8468 func GetVisualConfigsUnchecked(c *xgb.Conn, Screen uint32) GetVisualConfigsCookie { 8469 c.ExtLock.RLock() 8470 defer c.ExtLock.RUnlock() 8471 if _, ok := c.Extensions["GLX"]; !ok { 8472 panic("Cannot issue request 'GetVisualConfigs' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8473 } 8474 cookie := c.NewCookie(false, true) 8475 c.NewRequest(getVisualConfigsRequest(c, Screen), cookie) 8476 return GetVisualConfigsCookie{cookie} 8477 } 8478 8479 // GetVisualConfigsReply represents the data returned from a GetVisualConfigs request. 8480 type GetVisualConfigsReply struct { 8481 Sequence uint16 // sequence number of the request for this reply 8482 Length uint32 // number of bytes in this reply 8483 // padding: 1 bytes 8484 NumVisuals uint32 8485 NumProperties uint32 8486 // padding: 16 bytes 8487 PropertyList []uint32 // size: xgb.Pad((int(Length) * 4)) 8488 } 8489 8490 // Reply blocks and returns the reply data for a GetVisualConfigs request. 8491 func (cook GetVisualConfigsCookie) Reply() (*GetVisualConfigsReply, error) { 8492 buf, err := cook.Cookie.Reply() 8493 if err != nil { 8494 return nil, err 8495 } 8496 if buf == nil { 8497 return nil, nil 8498 } 8499 return getVisualConfigsReply(buf), nil 8500 } 8501 8502 // getVisualConfigsReply reads a byte slice into a GetVisualConfigsReply value. 8503 func getVisualConfigsReply(buf []byte) *GetVisualConfigsReply { 8504 v := new(GetVisualConfigsReply) 8505 b := 1 // skip reply determinant 8506 8507 b += 1 // padding 8508 8509 v.Sequence = xgb.Get16(buf[b:]) 8510 b += 2 8511 8512 v.Length = xgb.Get32(buf[b:]) // 4-byte units 8513 b += 4 8514 8515 v.NumVisuals = xgb.Get32(buf[b:]) 8516 b += 4 8517 8518 v.NumProperties = xgb.Get32(buf[b:]) 8519 b += 4 8520 8521 b += 16 // padding 8522 8523 v.PropertyList = make([]uint32, v.Length) 8524 for i := 0; i < int(v.Length); i++ { 8525 v.PropertyList[i] = xgb.Get32(buf[b:]) 8526 b += 4 8527 } 8528 8529 return v 8530 } 8531 8532 // Write request to wire for GetVisualConfigs 8533 // getVisualConfigsRequest writes a GetVisualConfigs request to a byte slice. 8534 func getVisualConfigsRequest(c *xgb.Conn, Screen uint32) []byte { 8535 size := 8 8536 b := 0 8537 buf := make([]byte, size) 8538 8539 c.ExtLock.RLock() 8540 buf[b] = c.Extensions["GLX"] 8541 c.ExtLock.RUnlock() 8542 b += 1 8543 8544 buf[b] = 14 // request opcode 8545 b += 1 8546 8547 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 8548 b += 2 8549 8550 xgb.Put32(buf[b:], Screen) 8551 b += 4 8552 8553 return buf 8554 } 8555 8556 // IsDirectCookie is a cookie used only for IsDirect requests. 8557 type IsDirectCookie struct { 8558 *xgb.Cookie 8559 } 8560 8561 // IsDirect sends a checked request. 8562 // If an error occurs, it will be returned with the reply by calling IsDirectCookie.Reply() 8563 func IsDirect(c *xgb.Conn, Context Context) IsDirectCookie { 8564 c.ExtLock.RLock() 8565 defer c.ExtLock.RUnlock() 8566 if _, ok := c.Extensions["GLX"]; !ok { 8567 panic("Cannot issue request 'IsDirect' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8568 } 8569 cookie := c.NewCookie(true, true) 8570 c.NewRequest(isDirectRequest(c, Context), cookie) 8571 return IsDirectCookie{cookie} 8572 } 8573 8574 // IsDirectUnchecked sends an unchecked request. 8575 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 8576 func IsDirectUnchecked(c *xgb.Conn, Context Context) IsDirectCookie { 8577 c.ExtLock.RLock() 8578 defer c.ExtLock.RUnlock() 8579 if _, ok := c.Extensions["GLX"]; !ok { 8580 panic("Cannot issue request 'IsDirect' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8581 } 8582 cookie := c.NewCookie(false, true) 8583 c.NewRequest(isDirectRequest(c, Context), cookie) 8584 return IsDirectCookie{cookie} 8585 } 8586 8587 // IsDirectReply represents the data returned from a IsDirect request. 8588 type IsDirectReply struct { 8589 Sequence uint16 // sequence number of the request for this reply 8590 Length uint32 // number of bytes in this reply 8591 // padding: 1 bytes 8592 IsDirect bool 8593 // padding: 23 bytes 8594 } 8595 8596 // Reply blocks and returns the reply data for a IsDirect request. 8597 func (cook IsDirectCookie) Reply() (*IsDirectReply, error) { 8598 buf, err := cook.Cookie.Reply() 8599 if err != nil { 8600 return nil, err 8601 } 8602 if buf == nil { 8603 return nil, nil 8604 } 8605 return isDirectReply(buf), nil 8606 } 8607 8608 // isDirectReply reads a byte slice into a IsDirectReply value. 8609 func isDirectReply(buf []byte) *IsDirectReply { 8610 v := new(IsDirectReply) 8611 b := 1 // skip reply determinant 8612 8613 b += 1 // padding 8614 8615 v.Sequence = xgb.Get16(buf[b:]) 8616 b += 2 8617 8618 v.Length = xgb.Get32(buf[b:]) // 4-byte units 8619 b += 4 8620 8621 if buf[b] == 1 { 8622 v.IsDirect = true 8623 } else { 8624 v.IsDirect = false 8625 } 8626 b += 1 8627 8628 b += 23 // padding 8629 8630 return v 8631 } 8632 8633 // Write request to wire for IsDirect 8634 // isDirectRequest writes a IsDirect request to a byte slice. 8635 func isDirectRequest(c *xgb.Conn, Context Context) []byte { 8636 size := 8 8637 b := 0 8638 buf := make([]byte, size) 8639 8640 c.ExtLock.RLock() 8641 buf[b] = c.Extensions["GLX"] 8642 c.ExtLock.RUnlock() 8643 b += 1 8644 8645 buf[b] = 6 // request opcode 8646 b += 1 8647 8648 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 8649 b += 2 8650 8651 xgb.Put32(buf[b:], uint32(Context)) 8652 b += 4 8653 8654 return buf 8655 } 8656 8657 // IsListCookie is a cookie used only for IsList requests. 8658 type IsListCookie struct { 8659 *xgb.Cookie 8660 } 8661 8662 // IsList sends a checked request. 8663 // If an error occurs, it will be returned with the reply by calling IsListCookie.Reply() 8664 func IsList(c *xgb.Conn, ContextTag ContextTag, List uint32) IsListCookie { 8665 c.ExtLock.RLock() 8666 defer c.ExtLock.RUnlock() 8667 if _, ok := c.Extensions["GLX"]; !ok { 8668 panic("Cannot issue request 'IsList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8669 } 8670 cookie := c.NewCookie(true, true) 8671 c.NewRequest(isListRequest(c, ContextTag, List), cookie) 8672 return IsListCookie{cookie} 8673 } 8674 8675 // IsListUnchecked sends an unchecked request. 8676 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 8677 func IsListUnchecked(c *xgb.Conn, ContextTag ContextTag, List uint32) IsListCookie { 8678 c.ExtLock.RLock() 8679 defer c.ExtLock.RUnlock() 8680 if _, ok := c.Extensions["GLX"]; !ok { 8681 panic("Cannot issue request 'IsList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8682 } 8683 cookie := c.NewCookie(false, true) 8684 c.NewRequest(isListRequest(c, ContextTag, List), cookie) 8685 return IsListCookie{cookie} 8686 } 8687 8688 // IsListReply represents the data returned from a IsList request. 8689 type IsListReply struct { 8690 Sequence uint16 // sequence number of the request for this reply 8691 Length uint32 // number of bytes in this reply 8692 // padding: 1 bytes 8693 RetVal Bool32 8694 } 8695 8696 // Reply blocks and returns the reply data for a IsList request. 8697 func (cook IsListCookie) Reply() (*IsListReply, error) { 8698 buf, err := cook.Cookie.Reply() 8699 if err != nil { 8700 return nil, err 8701 } 8702 if buf == nil { 8703 return nil, nil 8704 } 8705 return isListReply(buf), nil 8706 } 8707 8708 // isListReply reads a byte slice into a IsListReply value. 8709 func isListReply(buf []byte) *IsListReply { 8710 v := new(IsListReply) 8711 b := 1 // skip reply determinant 8712 8713 b += 1 // padding 8714 8715 v.Sequence = xgb.Get16(buf[b:]) 8716 b += 2 8717 8718 v.Length = xgb.Get32(buf[b:]) // 4-byte units 8719 b += 4 8720 8721 v.RetVal = Bool32(xgb.Get32(buf[b:])) 8722 b += 4 8723 8724 return v 8725 } 8726 8727 // Write request to wire for IsList 8728 // isListRequest writes a IsList request to a byte slice. 8729 func isListRequest(c *xgb.Conn, ContextTag ContextTag, List uint32) []byte { 8730 size := 12 8731 b := 0 8732 buf := make([]byte, size) 8733 8734 c.ExtLock.RLock() 8735 buf[b] = c.Extensions["GLX"] 8736 c.ExtLock.RUnlock() 8737 b += 1 8738 8739 buf[b] = 141 // request opcode 8740 b += 1 8741 8742 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 8743 b += 2 8744 8745 xgb.Put32(buf[b:], uint32(ContextTag)) 8746 b += 4 8747 8748 xgb.Put32(buf[b:], List) 8749 b += 4 8750 8751 return buf 8752 } 8753 8754 // IsQueryARBCookie is a cookie used only for IsQueryARB requests. 8755 type IsQueryARBCookie struct { 8756 *xgb.Cookie 8757 } 8758 8759 // IsQueryARB sends a checked request. 8760 // If an error occurs, it will be returned with the reply by calling IsQueryARBCookie.Reply() 8761 func IsQueryARB(c *xgb.Conn, ContextTag ContextTag, Id uint32) IsQueryARBCookie { 8762 c.ExtLock.RLock() 8763 defer c.ExtLock.RUnlock() 8764 if _, ok := c.Extensions["GLX"]; !ok { 8765 panic("Cannot issue request 'IsQueryARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8766 } 8767 cookie := c.NewCookie(true, true) 8768 c.NewRequest(isQueryARBRequest(c, ContextTag, Id), cookie) 8769 return IsQueryARBCookie{cookie} 8770 } 8771 8772 // IsQueryARBUnchecked sends an unchecked request. 8773 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 8774 func IsQueryARBUnchecked(c *xgb.Conn, ContextTag ContextTag, Id uint32) IsQueryARBCookie { 8775 c.ExtLock.RLock() 8776 defer c.ExtLock.RUnlock() 8777 if _, ok := c.Extensions["GLX"]; !ok { 8778 panic("Cannot issue request 'IsQueryARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8779 } 8780 cookie := c.NewCookie(false, true) 8781 c.NewRequest(isQueryARBRequest(c, ContextTag, Id), cookie) 8782 return IsQueryARBCookie{cookie} 8783 } 8784 8785 // IsQueryARBReply represents the data returned from a IsQueryARB request. 8786 type IsQueryARBReply struct { 8787 Sequence uint16 // sequence number of the request for this reply 8788 Length uint32 // number of bytes in this reply 8789 // padding: 1 bytes 8790 RetVal Bool32 8791 } 8792 8793 // Reply blocks and returns the reply data for a IsQueryARB request. 8794 func (cook IsQueryARBCookie) Reply() (*IsQueryARBReply, error) { 8795 buf, err := cook.Cookie.Reply() 8796 if err != nil { 8797 return nil, err 8798 } 8799 if buf == nil { 8800 return nil, nil 8801 } 8802 return isQueryARBReply(buf), nil 8803 } 8804 8805 // isQueryARBReply reads a byte slice into a IsQueryARBReply value. 8806 func isQueryARBReply(buf []byte) *IsQueryARBReply { 8807 v := new(IsQueryARBReply) 8808 b := 1 // skip reply determinant 8809 8810 b += 1 // padding 8811 8812 v.Sequence = xgb.Get16(buf[b:]) 8813 b += 2 8814 8815 v.Length = xgb.Get32(buf[b:]) // 4-byte units 8816 b += 4 8817 8818 v.RetVal = Bool32(xgb.Get32(buf[b:])) 8819 b += 4 8820 8821 return v 8822 } 8823 8824 // Write request to wire for IsQueryARB 8825 // isQueryARBRequest writes a IsQueryARB request to a byte slice. 8826 func isQueryARBRequest(c *xgb.Conn, ContextTag ContextTag, Id uint32) []byte { 8827 size := 12 8828 b := 0 8829 buf := make([]byte, size) 8830 8831 c.ExtLock.RLock() 8832 buf[b] = c.Extensions["GLX"] 8833 c.ExtLock.RUnlock() 8834 b += 1 8835 8836 buf[b] = 163 // request opcode 8837 b += 1 8838 8839 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 8840 b += 2 8841 8842 xgb.Put32(buf[b:], uint32(ContextTag)) 8843 b += 4 8844 8845 xgb.Put32(buf[b:], Id) 8846 b += 4 8847 8848 return buf 8849 } 8850 8851 // IsTextureCookie is a cookie used only for IsTexture requests. 8852 type IsTextureCookie struct { 8853 *xgb.Cookie 8854 } 8855 8856 // IsTexture sends a checked request. 8857 // If an error occurs, it will be returned with the reply by calling IsTextureCookie.Reply() 8858 func IsTexture(c *xgb.Conn, ContextTag ContextTag, Texture uint32) IsTextureCookie { 8859 c.ExtLock.RLock() 8860 defer c.ExtLock.RUnlock() 8861 if _, ok := c.Extensions["GLX"]; !ok { 8862 panic("Cannot issue request 'IsTexture' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8863 } 8864 cookie := c.NewCookie(true, true) 8865 c.NewRequest(isTextureRequest(c, ContextTag, Texture), cookie) 8866 return IsTextureCookie{cookie} 8867 } 8868 8869 // IsTextureUnchecked sends an unchecked request. 8870 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 8871 func IsTextureUnchecked(c *xgb.Conn, ContextTag ContextTag, Texture uint32) IsTextureCookie { 8872 c.ExtLock.RLock() 8873 defer c.ExtLock.RUnlock() 8874 if _, ok := c.Extensions["GLX"]; !ok { 8875 panic("Cannot issue request 'IsTexture' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8876 } 8877 cookie := c.NewCookie(false, true) 8878 c.NewRequest(isTextureRequest(c, ContextTag, Texture), cookie) 8879 return IsTextureCookie{cookie} 8880 } 8881 8882 // IsTextureReply represents the data returned from a IsTexture request. 8883 type IsTextureReply struct { 8884 Sequence uint16 // sequence number of the request for this reply 8885 Length uint32 // number of bytes in this reply 8886 // padding: 1 bytes 8887 RetVal Bool32 8888 } 8889 8890 // Reply blocks and returns the reply data for a IsTexture request. 8891 func (cook IsTextureCookie) Reply() (*IsTextureReply, error) { 8892 buf, err := cook.Cookie.Reply() 8893 if err != nil { 8894 return nil, err 8895 } 8896 if buf == nil { 8897 return nil, nil 8898 } 8899 return isTextureReply(buf), nil 8900 } 8901 8902 // isTextureReply reads a byte slice into a IsTextureReply value. 8903 func isTextureReply(buf []byte) *IsTextureReply { 8904 v := new(IsTextureReply) 8905 b := 1 // skip reply determinant 8906 8907 b += 1 // padding 8908 8909 v.Sequence = xgb.Get16(buf[b:]) 8910 b += 2 8911 8912 v.Length = xgb.Get32(buf[b:]) // 4-byte units 8913 b += 4 8914 8915 v.RetVal = Bool32(xgb.Get32(buf[b:])) 8916 b += 4 8917 8918 return v 8919 } 8920 8921 // Write request to wire for IsTexture 8922 // isTextureRequest writes a IsTexture request to a byte slice. 8923 func isTextureRequest(c *xgb.Conn, ContextTag ContextTag, Texture uint32) []byte { 8924 size := 12 8925 b := 0 8926 buf := make([]byte, size) 8927 8928 c.ExtLock.RLock() 8929 buf[b] = c.Extensions["GLX"] 8930 c.ExtLock.RUnlock() 8931 b += 1 8932 8933 buf[b] = 146 // request opcode 8934 b += 1 8935 8936 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 8937 b += 2 8938 8939 xgb.Put32(buf[b:], uint32(ContextTag)) 8940 b += 4 8941 8942 xgb.Put32(buf[b:], Texture) 8943 b += 4 8944 8945 return buf 8946 } 8947 8948 // MakeContextCurrentCookie is a cookie used only for MakeContextCurrent requests. 8949 type MakeContextCurrentCookie struct { 8950 *xgb.Cookie 8951 } 8952 8953 // MakeContextCurrent sends a checked request. 8954 // If an error occurs, it will be returned with the reply by calling MakeContextCurrentCookie.Reply() 8955 func MakeContextCurrent(c *xgb.Conn, OldContextTag ContextTag, Drawable Drawable, ReadDrawable Drawable, Context Context) MakeContextCurrentCookie { 8956 c.ExtLock.RLock() 8957 defer c.ExtLock.RUnlock() 8958 if _, ok := c.Extensions["GLX"]; !ok { 8959 panic("Cannot issue request 'MakeContextCurrent' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8960 } 8961 cookie := c.NewCookie(true, true) 8962 c.NewRequest(makeContextCurrentRequest(c, OldContextTag, Drawable, ReadDrawable, Context), cookie) 8963 return MakeContextCurrentCookie{cookie} 8964 } 8965 8966 // MakeContextCurrentUnchecked sends an unchecked request. 8967 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 8968 func MakeContextCurrentUnchecked(c *xgb.Conn, OldContextTag ContextTag, Drawable Drawable, ReadDrawable Drawable, Context Context) MakeContextCurrentCookie { 8969 c.ExtLock.RLock() 8970 defer c.ExtLock.RUnlock() 8971 if _, ok := c.Extensions["GLX"]; !ok { 8972 panic("Cannot issue request 'MakeContextCurrent' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 8973 } 8974 cookie := c.NewCookie(false, true) 8975 c.NewRequest(makeContextCurrentRequest(c, OldContextTag, Drawable, ReadDrawable, Context), cookie) 8976 return MakeContextCurrentCookie{cookie} 8977 } 8978 8979 // MakeContextCurrentReply represents the data returned from a MakeContextCurrent request. 8980 type MakeContextCurrentReply struct { 8981 Sequence uint16 // sequence number of the request for this reply 8982 Length uint32 // number of bytes in this reply 8983 // padding: 1 bytes 8984 ContextTag ContextTag 8985 // padding: 20 bytes 8986 } 8987 8988 // Reply blocks and returns the reply data for a MakeContextCurrent request. 8989 func (cook MakeContextCurrentCookie) Reply() (*MakeContextCurrentReply, error) { 8990 buf, err := cook.Cookie.Reply() 8991 if err != nil { 8992 return nil, err 8993 } 8994 if buf == nil { 8995 return nil, nil 8996 } 8997 return makeContextCurrentReply(buf), nil 8998 } 8999 9000 // makeContextCurrentReply reads a byte slice into a MakeContextCurrentReply value. 9001 func makeContextCurrentReply(buf []byte) *MakeContextCurrentReply { 9002 v := new(MakeContextCurrentReply) 9003 b := 1 // skip reply determinant 9004 9005 b += 1 // padding 9006 9007 v.Sequence = xgb.Get16(buf[b:]) 9008 b += 2 9009 9010 v.Length = xgb.Get32(buf[b:]) // 4-byte units 9011 b += 4 9012 9013 v.ContextTag = ContextTag(xgb.Get32(buf[b:])) 9014 b += 4 9015 9016 b += 20 // padding 9017 9018 return v 9019 } 9020 9021 // Write request to wire for MakeContextCurrent 9022 // makeContextCurrentRequest writes a MakeContextCurrent request to a byte slice. 9023 func makeContextCurrentRequest(c *xgb.Conn, OldContextTag ContextTag, Drawable Drawable, ReadDrawable Drawable, Context Context) []byte { 9024 size := 20 9025 b := 0 9026 buf := make([]byte, size) 9027 9028 c.ExtLock.RLock() 9029 buf[b] = c.Extensions["GLX"] 9030 c.ExtLock.RUnlock() 9031 b += 1 9032 9033 buf[b] = 26 // request opcode 9034 b += 1 9035 9036 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 9037 b += 2 9038 9039 xgb.Put32(buf[b:], uint32(OldContextTag)) 9040 b += 4 9041 9042 xgb.Put32(buf[b:], uint32(Drawable)) 9043 b += 4 9044 9045 xgb.Put32(buf[b:], uint32(ReadDrawable)) 9046 b += 4 9047 9048 xgb.Put32(buf[b:], uint32(Context)) 9049 b += 4 9050 9051 return buf 9052 } 9053 9054 // MakeCurrentCookie is a cookie used only for MakeCurrent requests. 9055 type MakeCurrentCookie struct { 9056 *xgb.Cookie 9057 } 9058 9059 // MakeCurrent sends a checked request. 9060 // If an error occurs, it will be returned with the reply by calling MakeCurrentCookie.Reply() 9061 func MakeCurrent(c *xgb.Conn, Drawable Drawable, Context Context, OldContextTag ContextTag) MakeCurrentCookie { 9062 c.ExtLock.RLock() 9063 defer c.ExtLock.RUnlock() 9064 if _, ok := c.Extensions["GLX"]; !ok { 9065 panic("Cannot issue request 'MakeCurrent' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9066 } 9067 cookie := c.NewCookie(true, true) 9068 c.NewRequest(makeCurrentRequest(c, Drawable, Context, OldContextTag), cookie) 9069 return MakeCurrentCookie{cookie} 9070 } 9071 9072 // MakeCurrentUnchecked sends an unchecked request. 9073 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 9074 func MakeCurrentUnchecked(c *xgb.Conn, Drawable Drawable, Context Context, OldContextTag ContextTag) MakeCurrentCookie { 9075 c.ExtLock.RLock() 9076 defer c.ExtLock.RUnlock() 9077 if _, ok := c.Extensions["GLX"]; !ok { 9078 panic("Cannot issue request 'MakeCurrent' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9079 } 9080 cookie := c.NewCookie(false, true) 9081 c.NewRequest(makeCurrentRequest(c, Drawable, Context, OldContextTag), cookie) 9082 return MakeCurrentCookie{cookie} 9083 } 9084 9085 // MakeCurrentReply represents the data returned from a MakeCurrent request. 9086 type MakeCurrentReply struct { 9087 Sequence uint16 // sequence number of the request for this reply 9088 Length uint32 // number of bytes in this reply 9089 // padding: 1 bytes 9090 ContextTag ContextTag 9091 // padding: 20 bytes 9092 } 9093 9094 // Reply blocks and returns the reply data for a MakeCurrent request. 9095 func (cook MakeCurrentCookie) Reply() (*MakeCurrentReply, error) { 9096 buf, err := cook.Cookie.Reply() 9097 if err != nil { 9098 return nil, err 9099 } 9100 if buf == nil { 9101 return nil, nil 9102 } 9103 return makeCurrentReply(buf), nil 9104 } 9105 9106 // makeCurrentReply reads a byte slice into a MakeCurrentReply value. 9107 func makeCurrentReply(buf []byte) *MakeCurrentReply { 9108 v := new(MakeCurrentReply) 9109 b := 1 // skip reply determinant 9110 9111 b += 1 // padding 9112 9113 v.Sequence = xgb.Get16(buf[b:]) 9114 b += 2 9115 9116 v.Length = xgb.Get32(buf[b:]) // 4-byte units 9117 b += 4 9118 9119 v.ContextTag = ContextTag(xgb.Get32(buf[b:])) 9120 b += 4 9121 9122 b += 20 // padding 9123 9124 return v 9125 } 9126 9127 // Write request to wire for MakeCurrent 9128 // makeCurrentRequest writes a MakeCurrent request to a byte slice. 9129 func makeCurrentRequest(c *xgb.Conn, Drawable Drawable, Context Context, OldContextTag ContextTag) []byte { 9130 size := 16 9131 b := 0 9132 buf := make([]byte, size) 9133 9134 c.ExtLock.RLock() 9135 buf[b] = c.Extensions["GLX"] 9136 c.ExtLock.RUnlock() 9137 b += 1 9138 9139 buf[b] = 5 // request opcode 9140 b += 1 9141 9142 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 9143 b += 2 9144 9145 xgb.Put32(buf[b:], uint32(Drawable)) 9146 b += 4 9147 9148 xgb.Put32(buf[b:], uint32(Context)) 9149 b += 4 9150 9151 xgb.Put32(buf[b:], uint32(OldContextTag)) 9152 b += 4 9153 9154 return buf 9155 } 9156 9157 // NewListCookie is a cookie used only for NewList requests. 9158 type NewListCookie struct { 9159 *xgb.Cookie 9160 } 9161 9162 // NewList sends an unchecked request. 9163 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 9164 func NewList(c *xgb.Conn, ContextTag ContextTag, List uint32, Mode uint32) NewListCookie { 9165 c.ExtLock.RLock() 9166 defer c.ExtLock.RUnlock() 9167 if _, ok := c.Extensions["GLX"]; !ok { 9168 panic("Cannot issue request 'NewList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9169 } 9170 cookie := c.NewCookie(false, false) 9171 c.NewRequest(newListRequest(c, ContextTag, List, Mode), cookie) 9172 return NewListCookie{cookie} 9173 } 9174 9175 // NewListChecked sends a checked request. 9176 // If an error occurs, it can be retrieved using NewListCookie.Check() 9177 func NewListChecked(c *xgb.Conn, ContextTag ContextTag, List uint32, Mode uint32) NewListCookie { 9178 c.ExtLock.RLock() 9179 defer c.ExtLock.RUnlock() 9180 if _, ok := c.Extensions["GLX"]; !ok { 9181 panic("Cannot issue request 'NewList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9182 } 9183 cookie := c.NewCookie(true, false) 9184 c.NewRequest(newListRequest(c, ContextTag, List, Mode), cookie) 9185 return NewListCookie{cookie} 9186 } 9187 9188 // Check returns an error if one occurred for checked requests that are not expecting a reply. 9189 // This cannot be called for requests expecting a reply, nor for unchecked requests. 9190 func (cook NewListCookie) Check() error { 9191 return cook.Cookie.Check() 9192 } 9193 9194 // Write request to wire for NewList 9195 // newListRequest writes a NewList request to a byte slice. 9196 func newListRequest(c *xgb.Conn, ContextTag ContextTag, List uint32, Mode uint32) []byte { 9197 size := 16 9198 b := 0 9199 buf := make([]byte, size) 9200 9201 c.ExtLock.RLock() 9202 buf[b] = c.Extensions["GLX"] 9203 c.ExtLock.RUnlock() 9204 b += 1 9205 9206 buf[b] = 101 // request opcode 9207 b += 1 9208 9209 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 9210 b += 2 9211 9212 xgb.Put32(buf[b:], uint32(ContextTag)) 9213 b += 4 9214 9215 xgb.Put32(buf[b:], List) 9216 b += 4 9217 9218 xgb.Put32(buf[b:], Mode) 9219 b += 4 9220 9221 return buf 9222 } 9223 9224 // PixelStorefCookie is a cookie used only for PixelStoref requests. 9225 type PixelStorefCookie struct { 9226 *xgb.Cookie 9227 } 9228 9229 // PixelStoref sends an unchecked request. 9230 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 9231 func PixelStoref(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum Float32) PixelStorefCookie { 9232 c.ExtLock.RLock() 9233 defer c.ExtLock.RUnlock() 9234 if _, ok := c.Extensions["GLX"]; !ok { 9235 panic("Cannot issue request 'PixelStoref' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9236 } 9237 cookie := c.NewCookie(false, false) 9238 c.NewRequest(pixelStorefRequest(c, ContextTag, Pname, Datum), cookie) 9239 return PixelStorefCookie{cookie} 9240 } 9241 9242 // PixelStorefChecked sends a checked request. 9243 // If an error occurs, it can be retrieved using PixelStorefCookie.Check() 9244 func PixelStorefChecked(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum Float32) PixelStorefCookie { 9245 c.ExtLock.RLock() 9246 defer c.ExtLock.RUnlock() 9247 if _, ok := c.Extensions["GLX"]; !ok { 9248 panic("Cannot issue request 'PixelStoref' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9249 } 9250 cookie := c.NewCookie(true, false) 9251 c.NewRequest(pixelStorefRequest(c, ContextTag, Pname, Datum), cookie) 9252 return PixelStorefCookie{cookie} 9253 } 9254 9255 // Check returns an error if one occurred for checked requests that are not expecting a reply. 9256 // This cannot be called for requests expecting a reply, nor for unchecked requests. 9257 func (cook PixelStorefCookie) Check() error { 9258 return cook.Cookie.Check() 9259 } 9260 9261 // Write request to wire for PixelStoref 9262 // pixelStorefRequest writes a PixelStoref request to a byte slice. 9263 func pixelStorefRequest(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum Float32) []byte { 9264 size := 16 9265 b := 0 9266 buf := make([]byte, size) 9267 9268 c.ExtLock.RLock() 9269 buf[b] = c.Extensions["GLX"] 9270 c.ExtLock.RUnlock() 9271 b += 1 9272 9273 buf[b] = 109 // request opcode 9274 b += 1 9275 9276 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 9277 b += 2 9278 9279 xgb.Put32(buf[b:], uint32(ContextTag)) 9280 b += 4 9281 9282 xgb.Put32(buf[b:], Pname) 9283 b += 4 9284 9285 xgb.Put32(buf[b:], uint32(Datum)) 9286 b += 4 9287 9288 return buf 9289 } 9290 9291 // PixelStoreiCookie is a cookie used only for PixelStorei requests. 9292 type PixelStoreiCookie struct { 9293 *xgb.Cookie 9294 } 9295 9296 // PixelStorei sends an unchecked request. 9297 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 9298 func PixelStorei(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum int32) PixelStoreiCookie { 9299 c.ExtLock.RLock() 9300 defer c.ExtLock.RUnlock() 9301 if _, ok := c.Extensions["GLX"]; !ok { 9302 panic("Cannot issue request 'PixelStorei' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9303 } 9304 cookie := c.NewCookie(false, false) 9305 c.NewRequest(pixelStoreiRequest(c, ContextTag, Pname, Datum), cookie) 9306 return PixelStoreiCookie{cookie} 9307 } 9308 9309 // PixelStoreiChecked sends a checked request. 9310 // If an error occurs, it can be retrieved using PixelStoreiCookie.Check() 9311 func PixelStoreiChecked(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum int32) PixelStoreiCookie { 9312 c.ExtLock.RLock() 9313 defer c.ExtLock.RUnlock() 9314 if _, ok := c.Extensions["GLX"]; !ok { 9315 panic("Cannot issue request 'PixelStorei' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9316 } 9317 cookie := c.NewCookie(true, false) 9318 c.NewRequest(pixelStoreiRequest(c, ContextTag, Pname, Datum), cookie) 9319 return PixelStoreiCookie{cookie} 9320 } 9321 9322 // Check returns an error if one occurred for checked requests that are not expecting a reply. 9323 // This cannot be called for requests expecting a reply, nor for unchecked requests. 9324 func (cook PixelStoreiCookie) Check() error { 9325 return cook.Cookie.Check() 9326 } 9327 9328 // Write request to wire for PixelStorei 9329 // pixelStoreiRequest writes a PixelStorei request to a byte slice. 9330 func pixelStoreiRequest(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum int32) []byte { 9331 size := 16 9332 b := 0 9333 buf := make([]byte, size) 9334 9335 c.ExtLock.RLock() 9336 buf[b] = c.Extensions["GLX"] 9337 c.ExtLock.RUnlock() 9338 b += 1 9339 9340 buf[b] = 110 // request opcode 9341 b += 1 9342 9343 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 9344 b += 2 9345 9346 xgb.Put32(buf[b:], uint32(ContextTag)) 9347 b += 4 9348 9349 xgb.Put32(buf[b:], Pname) 9350 b += 4 9351 9352 xgb.Put32(buf[b:], uint32(Datum)) 9353 b += 4 9354 9355 return buf 9356 } 9357 9358 // QueryContextCookie is a cookie used only for QueryContext requests. 9359 type QueryContextCookie struct { 9360 *xgb.Cookie 9361 } 9362 9363 // QueryContext sends a checked request. 9364 // If an error occurs, it will be returned with the reply by calling QueryContextCookie.Reply() 9365 func QueryContext(c *xgb.Conn, Context Context) QueryContextCookie { 9366 c.ExtLock.RLock() 9367 defer c.ExtLock.RUnlock() 9368 if _, ok := c.Extensions["GLX"]; !ok { 9369 panic("Cannot issue request 'QueryContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9370 } 9371 cookie := c.NewCookie(true, true) 9372 c.NewRequest(queryContextRequest(c, Context), cookie) 9373 return QueryContextCookie{cookie} 9374 } 9375 9376 // QueryContextUnchecked sends an unchecked request. 9377 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 9378 func QueryContextUnchecked(c *xgb.Conn, Context Context) QueryContextCookie { 9379 c.ExtLock.RLock() 9380 defer c.ExtLock.RUnlock() 9381 if _, ok := c.Extensions["GLX"]; !ok { 9382 panic("Cannot issue request 'QueryContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9383 } 9384 cookie := c.NewCookie(false, true) 9385 c.NewRequest(queryContextRequest(c, Context), cookie) 9386 return QueryContextCookie{cookie} 9387 } 9388 9389 // QueryContextReply represents the data returned from a QueryContext request. 9390 type QueryContextReply struct { 9391 Sequence uint16 // sequence number of the request for this reply 9392 Length uint32 // number of bytes in this reply 9393 // padding: 1 bytes 9394 NumAttribs uint32 9395 // padding: 20 bytes 9396 Attribs []uint32 // size: xgb.Pad(((int(NumAttribs) * 2) * 4)) 9397 } 9398 9399 // Reply blocks and returns the reply data for a QueryContext request. 9400 func (cook QueryContextCookie) Reply() (*QueryContextReply, error) { 9401 buf, err := cook.Cookie.Reply() 9402 if err != nil { 9403 return nil, err 9404 } 9405 if buf == nil { 9406 return nil, nil 9407 } 9408 return queryContextReply(buf), nil 9409 } 9410 9411 // queryContextReply reads a byte slice into a QueryContextReply value. 9412 func queryContextReply(buf []byte) *QueryContextReply { 9413 v := new(QueryContextReply) 9414 b := 1 // skip reply determinant 9415 9416 b += 1 // padding 9417 9418 v.Sequence = xgb.Get16(buf[b:]) 9419 b += 2 9420 9421 v.Length = xgb.Get32(buf[b:]) // 4-byte units 9422 b += 4 9423 9424 v.NumAttribs = xgb.Get32(buf[b:]) 9425 b += 4 9426 9427 b += 20 // padding 9428 9429 v.Attribs = make([]uint32, (int(v.NumAttribs) * 2)) 9430 for i := 0; i < int((int(v.NumAttribs) * 2)); i++ { 9431 v.Attribs[i] = xgb.Get32(buf[b:]) 9432 b += 4 9433 } 9434 9435 return v 9436 } 9437 9438 // Write request to wire for QueryContext 9439 // queryContextRequest writes a QueryContext request to a byte slice. 9440 func queryContextRequest(c *xgb.Conn, Context Context) []byte { 9441 size := 8 9442 b := 0 9443 buf := make([]byte, size) 9444 9445 c.ExtLock.RLock() 9446 buf[b] = c.Extensions["GLX"] 9447 c.ExtLock.RUnlock() 9448 b += 1 9449 9450 buf[b] = 25 // request opcode 9451 b += 1 9452 9453 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 9454 b += 2 9455 9456 xgb.Put32(buf[b:], uint32(Context)) 9457 b += 4 9458 9459 return buf 9460 } 9461 9462 // QueryExtensionsStringCookie is a cookie used only for QueryExtensionsString requests. 9463 type QueryExtensionsStringCookie struct { 9464 *xgb.Cookie 9465 } 9466 9467 // QueryExtensionsString sends a checked request. 9468 // If an error occurs, it will be returned with the reply by calling QueryExtensionsStringCookie.Reply() 9469 func QueryExtensionsString(c *xgb.Conn, Screen uint32) QueryExtensionsStringCookie { 9470 c.ExtLock.RLock() 9471 defer c.ExtLock.RUnlock() 9472 if _, ok := c.Extensions["GLX"]; !ok { 9473 panic("Cannot issue request 'QueryExtensionsString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9474 } 9475 cookie := c.NewCookie(true, true) 9476 c.NewRequest(queryExtensionsStringRequest(c, Screen), cookie) 9477 return QueryExtensionsStringCookie{cookie} 9478 } 9479 9480 // QueryExtensionsStringUnchecked sends an unchecked request. 9481 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 9482 func QueryExtensionsStringUnchecked(c *xgb.Conn, Screen uint32) QueryExtensionsStringCookie { 9483 c.ExtLock.RLock() 9484 defer c.ExtLock.RUnlock() 9485 if _, ok := c.Extensions["GLX"]; !ok { 9486 panic("Cannot issue request 'QueryExtensionsString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9487 } 9488 cookie := c.NewCookie(false, true) 9489 c.NewRequest(queryExtensionsStringRequest(c, Screen), cookie) 9490 return QueryExtensionsStringCookie{cookie} 9491 } 9492 9493 // QueryExtensionsStringReply represents the data returned from a QueryExtensionsString request. 9494 type QueryExtensionsStringReply struct { 9495 Sequence uint16 // sequence number of the request for this reply 9496 Length uint32 // number of bytes in this reply 9497 // padding: 1 bytes 9498 // padding: 4 bytes 9499 N uint32 9500 // padding: 16 bytes 9501 } 9502 9503 // Reply blocks and returns the reply data for a QueryExtensionsString request. 9504 func (cook QueryExtensionsStringCookie) Reply() (*QueryExtensionsStringReply, error) { 9505 buf, err := cook.Cookie.Reply() 9506 if err != nil { 9507 return nil, err 9508 } 9509 if buf == nil { 9510 return nil, nil 9511 } 9512 return queryExtensionsStringReply(buf), nil 9513 } 9514 9515 // queryExtensionsStringReply reads a byte slice into a QueryExtensionsStringReply value. 9516 func queryExtensionsStringReply(buf []byte) *QueryExtensionsStringReply { 9517 v := new(QueryExtensionsStringReply) 9518 b := 1 // skip reply determinant 9519 9520 b += 1 // padding 9521 9522 v.Sequence = xgb.Get16(buf[b:]) 9523 b += 2 9524 9525 v.Length = xgb.Get32(buf[b:]) // 4-byte units 9526 b += 4 9527 9528 b += 4 // padding 9529 9530 v.N = xgb.Get32(buf[b:]) 9531 b += 4 9532 9533 b += 16 // padding 9534 9535 return v 9536 } 9537 9538 // Write request to wire for QueryExtensionsString 9539 // queryExtensionsStringRequest writes a QueryExtensionsString request to a byte slice. 9540 func queryExtensionsStringRequest(c *xgb.Conn, Screen uint32) []byte { 9541 size := 8 9542 b := 0 9543 buf := make([]byte, size) 9544 9545 c.ExtLock.RLock() 9546 buf[b] = c.Extensions["GLX"] 9547 c.ExtLock.RUnlock() 9548 b += 1 9549 9550 buf[b] = 18 // request opcode 9551 b += 1 9552 9553 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 9554 b += 2 9555 9556 xgb.Put32(buf[b:], Screen) 9557 b += 4 9558 9559 return buf 9560 } 9561 9562 // QueryServerStringCookie is a cookie used only for QueryServerString requests. 9563 type QueryServerStringCookie struct { 9564 *xgb.Cookie 9565 } 9566 9567 // QueryServerString sends a checked request. 9568 // If an error occurs, it will be returned with the reply by calling QueryServerStringCookie.Reply() 9569 func QueryServerString(c *xgb.Conn, Screen uint32, Name uint32) QueryServerStringCookie { 9570 c.ExtLock.RLock() 9571 defer c.ExtLock.RUnlock() 9572 if _, ok := c.Extensions["GLX"]; !ok { 9573 panic("Cannot issue request 'QueryServerString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9574 } 9575 cookie := c.NewCookie(true, true) 9576 c.NewRequest(queryServerStringRequest(c, Screen, Name), cookie) 9577 return QueryServerStringCookie{cookie} 9578 } 9579 9580 // QueryServerStringUnchecked sends an unchecked request. 9581 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 9582 func QueryServerStringUnchecked(c *xgb.Conn, Screen uint32, Name uint32) QueryServerStringCookie { 9583 c.ExtLock.RLock() 9584 defer c.ExtLock.RUnlock() 9585 if _, ok := c.Extensions["GLX"]; !ok { 9586 panic("Cannot issue request 'QueryServerString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9587 } 9588 cookie := c.NewCookie(false, true) 9589 c.NewRequest(queryServerStringRequest(c, Screen, Name), cookie) 9590 return QueryServerStringCookie{cookie} 9591 } 9592 9593 // QueryServerStringReply represents the data returned from a QueryServerString request. 9594 type QueryServerStringReply struct { 9595 Sequence uint16 // sequence number of the request for this reply 9596 Length uint32 // number of bytes in this reply 9597 // padding: 1 bytes 9598 // padding: 4 bytes 9599 StrLen uint32 9600 // padding: 16 bytes 9601 String string // size: xgb.Pad((int(StrLen) * 1)) 9602 } 9603 9604 // Reply blocks and returns the reply data for a QueryServerString request. 9605 func (cook QueryServerStringCookie) Reply() (*QueryServerStringReply, error) { 9606 buf, err := cook.Cookie.Reply() 9607 if err != nil { 9608 return nil, err 9609 } 9610 if buf == nil { 9611 return nil, nil 9612 } 9613 return queryServerStringReply(buf), nil 9614 } 9615 9616 // queryServerStringReply reads a byte slice into a QueryServerStringReply value. 9617 func queryServerStringReply(buf []byte) *QueryServerStringReply { 9618 v := new(QueryServerStringReply) 9619 b := 1 // skip reply determinant 9620 9621 b += 1 // padding 9622 9623 v.Sequence = xgb.Get16(buf[b:]) 9624 b += 2 9625 9626 v.Length = xgb.Get32(buf[b:]) // 4-byte units 9627 b += 4 9628 9629 b += 4 // padding 9630 9631 v.StrLen = xgb.Get32(buf[b:]) 9632 b += 4 9633 9634 b += 16 // padding 9635 9636 { 9637 byteString := make([]byte, v.StrLen) 9638 copy(byteString[:v.StrLen], buf[b:]) 9639 v.String = string(byteString) 9640 b += int(v.StrLen) 9641 } 9642 9643 return v 9644 } 9645 9646 // Write request to wire for QueryServerString 9647 // queryServerStringRequest writes a QueryServerString request to a byte slice. 9648 func queryServerStringRequest(c *xgb.Conn, Screen uint32, Name uint32) []byte { 9649 size := 12 9650 b := 0 9651 buf := make([]byte, size) 9652 9653 c.ExtLock.RLock() 9654 buf[b] = c.Extensions["GLX"] 9655 c.ExtLock.RUnlock() 9656 b += 1 9657 9658 buf[b] = 19 // request opcode 9659 b += 1 9660 9661 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 9662 b += 2 9663 9664 xgb.Put32(buf[b:], Screen) 9665 b += 4 9666 9667 xgb.Put32(buf[b:], Name) 9668 b += 4 9669 9670 return buf 9671 } 9672 9673 // QueryVersionCookie is a cookie used only for QueryVersion requests. 9674 type QueryVersionCookie struct { 9675 *xgb.Cookie 9676 } 9677 9678 // QueryVersion sends a checked request. 9679 // If an error occurs, it will be returned with the reply by calling QueryVersionCookie.Reply() 9680 func QueryVersion(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) QueryVersionCookie { 9681 c.ExtLock.RLock() 9682 defer c.ExtLock.RUnlock() 9683 if _, ok := c.Extensions["GLX"]; !ok { 9684 panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9685 } 9686 cookie := c.NewCookie(true, true) 9687 c.NewRequest(queryVersionRequest(c, MajorVersion, MinorVersion), cookie) 9688 return QueryVersionCookie{cookie} 9689 } 9690 9691 // QueryVersionUnchecked sends an unchecked request. 9692 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 9693 func QueryVersionUnchecked(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) QueryVersionCookie { 9694 c.ExtLock.RLock() 9695 defer c.ExtLock.RUnlock() 9696 if _, ok := c.Extensions["GLX"]; !ok { 9697 panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9698 } 9699 cookie := c.NewCookie(false, true) 9700 c.NewRequest(queryVersionRequest(c, MajorVersion, MinorVersion), cookie) 9701 return QueryVersionCookie{cookie} 9702 } 9703 9704 // QueryVersionReply represents the data returned from a QueryVersion request. 9705 type QueryVersionReply struct { 9706 Sequence uint16 // sequence number of the request for this reply 9707 Length uint32 // number of bytes in this reply 9708 // padding: 1 bytes 9709 MajorVersion uint32 9710 MinorVersion uint32 9711 // padding: 16 bytes 9712 } 9713 9714 // Reply blocks and returns the reply data for a QueryVersion request. 9715 func (cook QueryVersionCookie) Reply() (*QueryVersionReply, error) { 9716 buf, err := cook.Cookie.Reply() 9717 if err != nil { 9718 return nil, err 9719 } 9720 if buf == nil { 9721 return nil, nil 9722 } 9723 return queryVersionReply(buf), nil 9724 } 9725 9726 // queryVersionReply reads a byte slice into a QueryVersionReply value. 9727 func queryVersionReply(buf []byte) *QueryVersionReply { 9728 v := new(QueryVersionReply) 9729 b := 1 // skip reply determinant 9730 9731 b += 1 // padding 9732 9733 v.Sequence = xgb.Get16(buf[b:]) 9734 b += 2 9735 9736 v.Length = xgb.Get32(buf[b:]) // 4-byte units 9737 b += 4 9738 9739 v.MajorVersion = xgb.Get32(buf[b:]) 9740 b += 4 9741 9742 v.MinorVersion = xgb.Get32(buf[b:]) 9743 b += 4 9744 9745 b += 16 // padding 9746 9747 return v 9748 } 9749 9750 // Write request to wire for QueryVersion 9751 // queryVersionRequest writes a QueryVersion request to a byte slice. 9752 func queryVersionRequest(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) []byte { 9753 size := 12 9754 b := 0 9755 buf := make([]byte, size) 9756 9757 c.ExtLock.RLock() 9758 buf[b] = c.Extensions["GLX"] 9759 c.ExtLock.RUnlock() 9760 b += 1 9761 9762 buf[b] = 7 // request opcode 9763 b += 1 9764 9765 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 9766 b += 2 9767 9768 xgb.Put32(buf[b:], MajorVersion) 9769 b += 4 9770 9771 xgb.Put32(buf[b:], MinorVersion) 9772 b += 4 9773 9774 return buf 9775 } 9776 9777 // ReadPixelsCookie is a cookie used only for ReadPixels requests. 9778 type ReadPixelsCookie struct { 9779 *xgb.Cookie 9780 } 9781 9782 // ReadPixels sends a checked request. 9783 // If an error occurs, it will be returned with the reply by calling ReadPixelsCookie.Reply() 9784 func ReadPixels(c *xgb.Conn, ContextTag ContextTag, X int32, Y int32, Width int32, Height int32, Format uint32, Type uint32, SwapBytes bool, LsbFirst bool) ReadPixelsCookie { 9785 c.ExtLock.RLock() 9786 defer c.ExtLock.RUnlock() 9787 if _, ok := c.Extensions["GLX"]; !ok { 9788 panic("Cannot issue request 'ReadPixels' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9789 } 9790 cookie := c.NewCookie(true, true) 9791 c.NewRequest(readPixelsRequest(c, ContextTag, X, Y, Width, Height, Format, Type, SwapBytes, LsbFirst), cookie) 9792 return ReadPixelsCookie{cookie} 9793 } 9794 9795 // ReadPixelsUnchecked sends an unchecked request. 9796 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 9797 func ReadPixelsUnchecked(c *xgb.Conn, ContextTag ContextTag, X int32, Y int32, Width int32, Height int32, Format uint32, Type uint32, SwapBytes bool, LsbFirst bool) ReadPixelsCookie { 9798 c.ExtLock.RLock() 9799 defer c.ExtLock.RUnlock() 9800 if _, ok := c.Extensions["GLX"]; !ok { 9801 panic("Cannot issue request 'ReadPixels' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9802 } 9803 cookie := c.NewCookie(false, true) 9804 c.NewRequest(readPixelsRequest(c, ContextTag, X, Y, Width, Height, Format, Type, SwapBytes, LsbFirst), cookie) 9805 return ReadPixelsCookie{cookie} 9806 } 9807 9808 // ReadPixelsReply represents the data returned from a ReadPixels request. 9809 type ReadPixelsReply struct { 9810 Sequence uint16 // sequence number of the request for this reply 9811 Length uint32 // number of bytes in this reply 9812 // padding: 1 bytes 9813 // padding: 24 bytes 9814 Data []byte // size: xgb.Pad(((int(Length) * 4) * 1)) 9815 } 9816 9817 // Reply blocks and returns the reply data for a ReadPixels request. 9818 func (cook ReadPixelsCookie) Reply() (*ReadPixelsReply, error) { 9819 buf, err := cook.Cookie.Reply() 9820 if err != nil { 9821 return nil, err 9822 } 9823 if buf == nil { 9824 return nil, nil 9825 } 9826 return readPixelsReply(buf), nil 9827 } 9828 9829 // readPixelsReply reads a byte slice into a ReadPixelsReply value. 9830 func readPixelsReply(buf []byte) *ReadPixelsReply { 9831 v := new(ReadPixelsReply) 9832 b := 1 // skip reply determinant 9833 9834 b += 1 // padding 9835 9836 v.Sequence = xgb.Get16(buf[b:]) 9837 b += 2 9838 9839 v.Length = xgb.Get32(buf[b:]) // 4-byte units 9840 b += 4 9841 9842 b += 24 // padding 9843 9844 v.Data = make([]byte, (int(v.Length) * 4)) 9845 copy(v.Data[:(int(v.Length)*4)], buf[b:]) 9846 b += int((int(v.Length) * 4)) 9847 9848 return v 9849 } 9850 9851 // Write request to wire for ReadPixels 9852 // readPixelsRequest writes a ReadPixels request to a byte slice. 9853 func readPixelsRequest(c *xgb.Conn, ContextTag ContextTag, X int32, Y int32, Width int32, Height int32, Format uint32, Type uint32, SwapBytes bool, LsbFirst bool) []byte { 9854 size := 36 9855 b := 0 9856 buf := make([]byte, size) 9857 9858 c.ExtLock.RLock() 9859 buf[b] = c.Extensions["GLX"] 9860 c.ExtLock.RUnlock() 9861 b += 1 9862 9863 buf[b] = 111 // request opcode 9864 b += 1 9865 9866 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 9867 b += 2 9868 9869 xgb.Put32(buf[b:], uint32(ContextTag)) 9870 b += 4 9871 9872 xgb.Put32(buf[b:], uint32(X)) 9873 b += 4 9874 9875 xgb.Put32(buf[b:], uint32(Y)) 9876 b += 4 9877 9878 xgb.Put32(buf[b:], uint32(Width)) 9879 b += 4 9880 9881 xgb.Put32(buf[b:], uint32(Height)) 9882 b += 4 9883 9884 xgb.Put32(buf[b:], Format) 9885 b += 4 9886 9887 xgb.Put32(buf[b:], Type) 9888 b += 4 9889 9890 if SwapBytes { 9891 buf[b] = 1 9892 } else { 9893 buf[b] = 0 9894 } 9895 b += 1 9896 9897 if LsbFirst { 9898 buf[b] = 1 9899 } else { 9900 buf[b] = 0 9901 } 9902 b += 1 9903 9904 return buf 9905 } 9906 9907 // RenderCookie is a cookie used only for Render requests. 9908 type RenderCookie struct { 9909 *xgb.Cookie 9910 } 9911 9912 // Render sends an unchecked request. 9913 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 9914 func Render(c *xgb.Conn, ContextTag ContextTag, Data []byte) RenderCookie { 9915 c.ExtLock.RLock() 9916 defer c.ExtLock.RUnlock() 9917 if _, ok := c.Extensions["GLX"]; !ok { 9918 panic("Cannot issue request 'Render' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9919 } 9920 cookie := c.NewCookie(false, false) 9921 c.NewRequest(renderRequest(c, ContextTag, Data), cookie) 9922 return RenderCookie{cookie} 9923 } 9924 9925 // RenderChecked sends a checked request. 9926 // If an error occurs, it can be retrieved using RenderCookie.Check() 9927 func RenderChecked(c *xgb.Conn, ContextTag ContextTag, Data []byte) RenderCookie { 9928 c.ExtLock.RLock() 9929 defer c.ExtLock.RUnlock() 9930 if _, ok := c.Extensions["GLX"]; !ok { 9931 panic("Cannot issue request 'Render' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9932 } 9933 cookie := c.NewCookie(true, false) 9934 c.NewRequest(renderRequest(c, ContextTag, Data), cookie) 9935 return RenderCookie{cookie} 9936 } 9937 9938 // Check returns an error if one occurred for checked requests that are not expecting a reply. 9939 // This cannot be called for requests expecting a reply, nor for unchecked requests. 9940 func (cook RenderCookie) Check() error { 9941 return cook.Cookie.Check() 9942 } 9943 9944 // Write request to wire for Render 9945 // renderRequest writes a Render request to a byte slice. 9946 func renderRequest(c *xgb.Conn, ContextTag ContextTag, Data []byte) []byte { 9947 size := xgb.Pad((8 + xgb.Pad((len(Data) * 1)))) 9948 b := 0 9949 buf := make([]byte, size) 9950 9951 c.ExtLock.RLock() 9952 buf[b] = c.Extensions["GLX"] 9953 c.ExtLock.RUnlock() 9954 b += 1 9955 9956 buf[b] = 1 // request opcode 9957 b += 1 9958 9959 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 9960 b += 2 9961 9962 xgb.Put32(buf[b:], uint32(ContextTag)) 9963 b += 4 9964 9965 copy(buf[b:], Data[:len(Data)]) 9966 b += int(len(Data)) 9967 9968 return buf 9969 } 9970 9971 // RenderLargeCookie is a cookie used only for RenderLarge requests. 9972 type RenderLargeCookie struct { 9973 *xgb.Cookie 9974 } 9975 9976 // RenderLarge sends an unchecked request. 9977 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 9978 func RenderLarge(c *xgb.Conn, ContextTag ContextTag, RequestNum uint16, RequestTotal uint16, DataLen uint32, Data []byte) RenderLargeCookie { 9979 c.ExtLock.RLock() 9980 defer c.ExtLock.RUnlock() 9981 if _, ok := c.Extensions["GLX"]; !ok { 9982 panic("Cannot issue request 'RenderLarge' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9983 } 9984 cookie := c.NewCookie(false, false) 9985 c.NewRequest(renderLargeRequest(c, ContextTag, RequestNum, RequestTotal, DataLen, Data), cookie) 9986 return RenderLargeCookie{cookie} 9987 } 9988 9989 // RenderLargeChecked sends a checked request. 9990 // If an error occurs, it can be retrieved using RenderLargeCookie.Check() 9991 func RenderLargeChecked(c *xgb.Conn, ContextTag ContextTag, RequestNum uint16, RequestTotal uint16, DataLen uint32, Data []byte) RenderLargeCookie { 9992 c.ExtLock.RLock() 9993 defer c.ExtLock.RUnlock() 9994 if _, ok := c.Extensions["GLX"]; !ok { 9995 panic("Cannot issue request 'RenderLarge' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 9996 } 9997 cookie := c.NewCookie(true, false) 9998 c.NewRequest(renderLargeRequest(c, ContextTag, RequestNum, RequestTotal, DataLen, Data), cookie) 9999 return RenderLargeCookie{cookie} 10000 } 10001 10002 // Check returns an error if one occurred for checked requests that are not expecting a reply. 10003 // This cannot be called for requests expecting a reply, nor for unchecked requests. 10004 func (cook RenderLargeCookie) Check() error { 10005 return cook.Cookie.Check() 10006 } 10007 10008 // Write request to wire for RenderLarge 10009 // renderLargeRequest writes a RenderLarge request to a byte slice. 10010 func renderLargeRequest(c *xgb.Conn, ContextTag ContextTag, RequestNum uint16, RequestTotal uint16, DataLen uint32, Data []byte) []byte { 10011 size := xgb.Pad((16 + xgb.Pad((int(DataLen) * 1)))) 10012 b := 0 10013 buf := make([]byte, size) 10014 10015 c.ExtLock.RLock() 10016 buf[b] = c.Extensions["GLX"] 10017 c.ExtLock.RUnlock() 10018 b += 1 10019 10020 buf[b] = 2 // request opcode 10021 b += 1 10022 10023 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 10024 b += 2 10025 10026 xgb.Put32(buf[b:], uint32(ContextTag)) 10027 b += 4 10028 10029 xgb.Put16(buf[b:], RequestNum) 10030 b += 2 10031 10032 xgb.Put16(buf[b:], RequestTotal) 10033 b += 2 10034 10035 xgb.Put32(buf[b:], DataLen) 10036 b += 4 10037 10038 copy(buf[b:], Data[:DataLen]) 10039 b += int(DataLen) 10040 10041 return buf 10042 } 10043 10044 // RenderModeCookie is a cookie used only for RenderMode requests. 10045 type RenderModeCookie struct { 10046 *xgb.Cookie 10047 } 10048 10049 // RenderMode sends a checked request. 10050 // If an error occurs, it will be returned with the reply by calling RenderModeCookie.Reply() 10051 func RenderMode(c *xgb.Conn, ContextTag ContextTag, Mode uint32) RenderModeCookie { 10052 c.ExtLock.RLock() 10053 defer c.ExtLock.RUnlock() 10054 if _, ok := c.Extensions["GLX"]; !ok { 10055 panic("Cannot issue request 'RenderMode' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10056 } 10057 cookie := c.NewCookie(true, true) 10058 c.NewRequest(renderModeRequest(c, ContextTag, Mode), cookie) 10059 return RenderModeCookie{cookie} 10060 } 10061 10062 // RenderModeUnchecked sends an unchecked request. 10063 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 10064 func RenderModeUnchecked(c *xgb.Conn, ContextTag ContextTag, Mode uint32) RenderModeCookie { 10065 c.ExtLock.RLock() 10066 defer c.ExtLock.RUnlock() 10067 if _, ok := c.Extensions["GLX"]; !ok { 10068 panic("Cannot issue request 'RenderMode' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10069 } 10070 cookie := c.NewCookie(false, true) 10071 c.NewRequest(renderModeRequest(c, ContextTag, Mode), cookie) 10072 return RenderModeCookie{cookie} 10073 } 10074 10075 // RenderModeReply represents the data returned from a RenderMode request. 10076 type RenderModeReply struct { 10077 Sequence uint16 // sequence number of the request for this reply 10078 Length uint32 // number of bytes in this reply 10079 // padding: 1 bytes 10080 RetVal uint32 10081 N uint32 10082 NewMode uint32 10083 // padding: 12 bytes 10084 Data []uint32 // size: xgb.Pad((int(N) * 4)) 10085 } 10086 10087 // Reply blocks and returns the reply data for a RenderMode request. 10088 func (cook RenderModeCookie) Reply() (*RenderModeReply, error) { 10089 buf, err := cook.Cookie.Reply() 10090 if err != nil { 10091 return nil, err 10092 } 10093 if buf == nil { 10094 return nil, nil 10095 } 10096 return renderModeReply(buf), nil 10097 } 10098 10099 // renderModeReply reads a byte slice into a RenderModeReply value. 10100 func renderModeReply(buf []byte) *RenderModeReply { 10101 v := new(RenderModeReply) 10102 b := 1 // skip reply determinant 10103 10104 b += 1 // padding 10105 10106 v.Sequence = xgb.Get16(buf[b:]) 10107 b += 2 10108 10109 v.Length = xgb.Get32(buf[b:]) // 4-byte units 10110 b += 4 10111 10112 v.RetVal = xgb.Get32(buf[b:]) 10113 b += 4 10114 10115 v.N = xgb.Get32(buf[b:]) 10116 b += 4 10117 10118 v.NewMode = xgb.Get32(buf[b:]) 10119 b += 4 10120 10121 b += 12 // padding 10122 10123 v.Data = make([]uint32, v.N) 10124 for i := 0; i < int(v.N); i++ { 10125 v.Data[i] = xgb.Get32(buf[b:]) 10126 b += 4 10127 } 10128 10129 return v 10130 } 10131 10132 // Write request to wire for RenderMode 10133 // renderModeRequest writes a RenderMode request to a byte slice. 10134 func renderModeRequest(c *xgb.Conn, ContextTag ContextTag, Mode uint32) []byte { 10135 size := 12 10136 b := 0 10137 buf := make([]byte, size) 10138 10139 c.ExtLock.RLock() 10140 buf[b] = c.Extensions["GLX"] 10141 c.ExtLock.RUnlock() 10142 b += 1 10143 10144 buf[b] = 107 // request opcode 10145 b += 1 10146 10147 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 10148 b += 2 10149 10150 xgb.Put32(buf[b:], uint32(ContextTag)) 10151 b += 4 10152 10153 xgb.Put32(buf[b:], Mode) 10154 b += 4 10155 10156 return buf 10157 } 10158 10159 // SelectBufferCookie is a cookie used only for SelectBuffer requests. 10160 type SelectBufferCookie struct { 10161 *xgb.Cookie 10162 } 10163 10164 // SelectBuffer sends an unchecked request. 10165 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 10166 func SelectBuffer(c *xgb.Conn, ContextTag ContextTag, Size int32) SelectBufferCookie { 10167 c.ExtLock.RLock() 10168 defer c.ExtLock.RUnlock() 10169 if _, ok := c.Extensions["GLX"]; !ok { 10170 panic("Cannot issue request 'SelectBuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10171 } 10172 cookie := c.NewCookie(false, false) 10173 c.NewRequest(selectBufferRequest(c, ContextTag, Size), cookie) 10174 return SelectBufferCookie{cookie} 10175 } 10176 10177 // SelectBufferChecked sends a checked request. 10178 // If an error occurs, it can be retrieved using SelectBufferCookie.Check() 10179 func SelectBufferChecked(c *xgb.Conn, ContextTag ContextTag, Size int32) SelectBufferCookie { 10180 c.ExtLock.RLock() 10181 defer c.ExtLock.RUnlock() 10182 if _, ok := c.Extensions["GLX"]; !ok { 10183 panic("Cannot issue request 'SelectBuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10184 } 10185 cookie := c.NewCookie(true, false) 10186 c.NewRequest(selectBufferRequest(c, ContextTag, Size), cookie) 10187 return SelectBufferCookie{cookie} 10188 } 10189 10190 // Check returns an error if one occurred for checked requests that are not expecting a reply. 10191 // This cannot be called for requests expecting a reply, nor for unchecked requests. 10192 func (cook SelectBufferCookie) Check() error { 10193 return cook.Cookie.Check() 10194 } 10195 10196 // Write request to wire for SelectBuffer 10197 // selectBufferRequest writes a SelectBuffer request to a byte slice. 10198 func selectBufferRequest(c *xgb.Conn, ContextTag ContextTag, Size int32) []byte { 10199 size := 12 10200 b := 0 10201 buf := make([]byte, size) 10202 10203 c.ExtLock.RLock() 10204 buf[b] = c.Extensions["GLX"] 10205 c.ExtLock.RUnlock() 10206 b += 1 10207 10208 buf[b] = 106 // request opcode 10209 b += 1 10210 10211 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 10212 b += 2 10213 10214 xgb.Put32(buf[b:], uint32(ContextTag)) 10215 b += 4 10216 10217 xgb.Put32(buf[b:], uint32(Size)) 10218 b += 4 10219 10220 return buf 10221 } 10222 10223 // SetClientInfo2ARBCookie is a cookie used only for SetClientInfo2ARB requests. 10224 type SetClientInfo2ARBCookie struct { 10225 *xgb.Cookie 10226 } 10227 10228 // SetClientInfo2ARB sends an unchecked request. 10229 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 10230 func SetClientInfo2ARB(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32, NumVersions uint32, GlStrLen uint32, GlxStrLen uint32, GlVersions []uint32, GlExtensionString string, GlxExtensionString string) SetClientInfo2ARBCookie { 10231 c.ExtLock.RLock() 10232 defer c.ExtLock.RUnlock() 10233 if _, ok := c.Extensions["GLX"]; !ok { 10234 panic("Cannot issue request 'SetClientInfo2ARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10235 } 10236 cookie := c.NewCookie(false, false) 10237 c.NewRequest(setClientInfo2ARBRequest(c, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen, GlVersions, GlExtensionString, GlxExtensionString), cookie) 10238 return SetClientInfo2ARBCookie{cookie} 10239 } 10240 10241 // SetClientInfo2ARBChecked sends a checked request. 10242 // If an error occurs, it can be retrieved using SetClientInfo2ARBCookie.Check() 10243 func SetClientInfo2ARBChecked(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32, NumVersions uint32, GlStrLen uint32, GlxStrLen uint32, GlVersions []uint32, GlExtensionString string, GlxExtensionString string) SetClientInfo2ARBCookie { 10244 c.ExtLock.RLock() 10245 defer c.ExtLock.RUnlock() 10246 if _, ok := c.Extensions["GLX"]; !ok { 10247 panic("Cannot issue request 'SetClientInfo2ARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10248 } 10249 cookie := c.NewCookie(true, false) 10250 c.NewRequest(setClientInfo2ARBRequest(c, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen, GlVersions, GlExtensionString, GlxExtensionString), cookie) 10251 return SetClientInfo2ARBCookie{cookie} 10252 } 10253 10254 // Check returns an error if one occurred for checked requests that are not expecting a reply. 10255 // This cannot be called for requests expecting a reply, nor for unchecked requests. 10256 func (cook SetClientInfo2ARBCookie) Check() error { 10257 return cook.Cookie.Check() 10258 } 10259 10260 // Write request to wire for SetClientInfo2ARB 10261 // setClientInfo2ARBRequest writes a SetClientInfo2ARB request to a byte slice. 10262 func setClientInfo2ARBRequest(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32, NumVersions uint32, GlStrLen uint32, GlxStrLen uint32, GlVersions []uint32, GlExtensionString string, GlxExtensionString string) []byte { 10263 size := xgb.Pad((((24 + xgb.Pad(((int(NumVersions) * 3) * 4))) + xgb.Pad((int(GlStrLen) * 1))) + xgb.Pad((int(GlxStrLen) * 1)))) 10264 b := 0 10265 buf := make([]byte, size) 10266 10267 c.ExtLock.RLock() 10268 buf[b] = c.Extensions["GLX"] 10269 c.ExtLock.RUnlock() 10270 b += 1 10271 10272 buf[b] = 35 // request opcode 10273 b += 1 10274 10275 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 10276 b += 2 10277 10278 xgb.Put32(buf[b:], MajorVersion) 10279 b += 4 10280 10281 xgb.Put32(buf[b:], MinorVersion) 10282 b += 4 10283 10284 xgb.Put32(buf[b:], NumVersions) 10285 b += 4 10286 10287 xgb.Put32(buf[b:], GlStrLen) 10288 b += 4 10289 10290 xgb.Put32(buf[b:], GlxStrLen) 10291 b += 4 10292 10293 for i := 0; i < int((int(NumVersions) * 3)); i++ { 10294 xgb.Put32(buf[b:], GlVersions[i]) 10295 b += 4 10296 } 10297 10298 copy(buf[b:], GlExtensionString[:GlStrLen]) 10299 b += int(GlStrLen) 10300 10301 copy(buf[b:], GlxExtensionString[:GlxStrLen]) 10302 b += int(GlxStrLen) 10303 10304 return buf 10305 } 10306 10307 // SetClientInfoARBCookie is a cookie used only for SetClientInfoARB requests. 10308 type SetClientInfoARBCookie struct { 10309 *xgb.Cookie 10310 } 10311 10312 // SetClientInfoARB sends an unchecked request. 10313 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 10314 func SetClientInfoARB(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32, NumVersions uint32, GlStrLen uint32, GlxStrLen uint32, GlVersions []uint32, GlExtensionString string, GlxExtensionString string) SetClientInfoARBCookie { 10315 c.ExtLock.RLock() 10316 defer c.ExtLock.RUnlock() 10317 if _, ok := c.Extensions["GLX"]; !ok { 10318 panic("Cannot issue request 'SetClientInfoARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10319 } 10320 cookie := c.NewCookie(false, false) 10321 c.NewRequest(setClientInfoARBRequest(c, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen, GlVersions, GlExtensionString, GlxExtensionString), cookie) 10322 return SetClientInfoARBCookie{cookie} 10323 } 10324 10325 // SetClientInfoARBChecked sends a checked request. 10326 // If an error occurs, it can be retrieved using SetClientInfoARBCookie.Check() 10327 func SetClientInfoARBChecked(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32, NumVersions uint32, GlStrLen uint32, GlxStrLen uint32, GlVersions []uint32, GlExtensionString string, GlxExtensionString string) SetClientInfoARBCookie { 10328 c.ExtLock.RLock() 10329 defer c.ExtLock.RUnlock() 10330 if _, ok := c.Extensions["GLX"]; !ok { 10331 panic("Cannot issue request 'SetClientInfoARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10332 } 10333 cookie := c.NewCookie(true, false) 10334 c.NewRequest(setClientInfoARBRequest(c, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen, GlVersions, GlExtensionString, GlxExtensionString), cookie) 10335 return SetClientInfoARBCookie{cookie} 10336 } 10337 10338 // Check returns an error if one occurred for checked requests that are not expecting a reply. 10339 // This cannot be called for requests expecting a reply, nor for unchecked requests. 10340 func (cook SetClientInfoARBCookie) Check() error { 10341 return cook.Cookie.Check() 10342 } 10343 10344 // Write request to wire for SetClientInfoARB 10345 // setClientInfoARBRequest writes a SetClientInfoARB request to a byte slice. 10346 func setClientInfoARBRequest(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32, NumVersions uint32, GlStrLen uint32, GlxStrLen uint32, GlVersions []uint32, GlExtensionString string, GlxExtensionString string) []byte { 10347 size := xgb.Pad((((24 + xgb.Pad(((int(NumVersions) * 2) * 4))) + xgb.Pad((int(GlStrLen) * 1))) + xgb.Pad((int(GlxStrLen) * 1)))) 10348 b := 0 10349 buf := make([]byte, size) 10350 10351 c.ExtLock.RLock() 10352 buf[b] = c.Extensions["GLX"] 10353 c.ExtLock.RUnlock() 10354 b += 1 10355 10356 buf[b] = 33 // request opcode 10357 b += 1 10358 10359 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 10360 b += 2 10361 10362 xgb.Put32(buf[b:], MajorVersion) 10363 b += 4 10364 10365 xgb.Put32(buf[b:], MinorVersion) 10366 b += 4 10367 10368 xgb.Put32(buf[b:], NumVersions) 10369 b += 4 10370 10371 xgb.Put32(buf[b:], GlStrLen) 10372 b += 4 10373 10374 xgb.Put32(buf[b:], GlxStrLen) 10375 b += 4 10376 10377 for i := 0; i < int((int(NumVersions) * 2)); i++ { 10378 xgb.Put32(buf[b:], GlVersions[i]) 10379 b += 4 10380 } 10381 10382 copy(buf[b:], GlExtensionString[:GlStrLen]) 10383 b += int(GlStrLen) 10384 10385 copy(buf[b:], GlxExtensionString[:GlxStrLen]) 10386 b += int(GlxStrLen) 10387 10388 return buf 10389 } 10390 10391 // SwapBuffersCookie is a cookie used only for SwapBuffers requests. 10392 type SwapBuffersCookie struct { 10393 *xgb.Cookie 10394 } 10395 10396 // SwapBuffers sends an unchecked request. 10397 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 10398 func SwapBuffers(c *xgb.Conn, ContextTag ContextTag, Drawable Drawable) SwapBuffersCookie { 10399 c.ExtLock.RLock() 10400 defer c.ExtLock.RUnlock() 10401 if _, ok := c.Extensions["GLX"]; !ok { 10402 panic("Cannot issue request 'SwapBuffers' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10403 } 10404 cookie := c.NewCookie(false, false) 10405 c.NewRequest(swapBuffersRequest(c, ContextTag, Drawable), cookie) 10406 return SwapBuffersCookie{cookie} 10407 } 10408 10409 // SwapBuffersChecked sends a checked request. 10410 // If an error occurs, it can be retrieved using SwapBuffersCookie.Check() 10411 func SwapBuffersChecked(c *xgb.Conn, ContextTag ContextTag, Drawable Drawable) SwapBuffersCookie { 10412 c.ExtLock.RLock() 10413 defer c.ExtLock.RUnlock() 10414 if _, ok := c.Extensions["GLX"]; !ok { 10415 panic("Cannot issue request 'SwapBuffers' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10416 } 10417 cookie := c.NewCookie(true, false) 10418 c.NewRequest(swapBuffersRequest(c, ContextTag, Drawable), cookie) 10419 return SwapBuffersCookie{cookie} 10420 } 10421 10422 // Check returns an error if one occurred for checked requests that are not expecting a reply. 10423 // This cannot be called for requests expecting a reply, nor for unchecked requests. 10424 func (cook SwapBuffersCookie) Check() error { 10425 return cook.Cookie.Check() 10426 } 10427 10428 // Write request to wire for SwapBuffers 10429 // swapBuffersRequest writes a SwapBuffers request to a byte slice. 10430 func swapBuffersRequest(c *xgb.Conn, ContextTag ContextTag, Drawable Drawable) []byte { 10431 size := 12 10432 b := 0 10433 buf := make([]byte, size) 10434 10435 c.ExtLock.RLock() 10436 buf[b] = c.Extensions["GLX"] 10437 c.ExtLock.RUnlock() 10438 b += 1 10439 10440 buf[b] = 11 // request opcode 10441 b += 1 10442 10443 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 10444 b += 2 10445 10446 xgb.Put32(buf[b:], uint32(ContextTag)) 10447 b += 4 10448 10449 xgb.Put32(buf[b:], uint32(Drawable)) 10450 b += 4 10451 10452 return buf 10453 } 10454 10455 // UseXFontCookie is a cookie used only for UseXFont requests. 10456 type UseXFontCookie struct { 10457 *xgb.Cookie 10458 } 10459 10460 // UseXFont sends an unchecked request. 10461 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 10462 func UseXFont(c *xgb.Conn, ContextTag ContextTag, Font xproto.Font, First uint32, Count uint32, ListBase uint32) UseXFontCookie { 10463 c.ExtLock.RLock() 10464 defer c.ExtLock.RUnlock() 10465 if _, ok := c.Extensions["GLX"]; !ok { 10466 panic("Cannot issue request 'UseXFont' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10467 } 10468 cookie := c.NewCookie(false, false) 10469 c.NewRequest(useXFontRequest(c, ContextTag, Font, First, Count, ListBase), cookie) 10470 return UseXFontCookie{cookie} 10471 } 10472 10473 // UseXFontChecked sends a checked request. 10474 // If an error occurs, it can be retrieved using UseXFontCookie.Check() 10475 func UseXFontChecked(c *xgb.Conn, ContextTag ContextTag, Font xproto.Font, First uint32, Count uint32, ListBase uint32) UseXFontCookie { 10476 c.ExtLock.RLock() 10477 defer c.ExtLock.RUnlock() 10478 if _, ok := c.Extensions["GLX"]; !ok { 10479 panic("Cannot issue request 'UseXFont' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10480 } 10481 cookie := c.NewCookie(true, false) 10482 c.NewRequest(useXFontRequest(c, ContextTag, Font, First, Count, ListBase), cookie) 10483 return UseXFontCookie{cookie} 10484 } 10485 10486 // Check returns an error if one occurred for checked requests that are not expecting a reply. 10487 // This cannot be called for requests expecting a reply, nor for unchecked requests. 10488 func (cook UseXFontCookie) Check() error { 10489 return cook.Cookie.Check() 10490 } 10491 10492 // Write request to wire for UseXFont 10493 // useXFontRequest writes a UseXFont request to a byte slice. 10494 func useXFontRequest(c *xgb.Conn, ContextTag ContextTag, Font xproto.Font, First uint32, Count uint32, ListBase uint32) []byte { 10495 size := 24 10496 b := 0 10497 buf := make([]byte, size) 10498 10499 c.ExtLock.RLock() 10500 buf[b] = c.Extensions["GLX"] 10501 c.ExtLock.RUnlock() 10502 b += 1 10503 10504 buf[b] = 12 // request opcode 10505 b += 1 10506 10507 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 10508 b += 2 10509 10510 xgb.Put32(buf[b:], uint32(ContextTag)) 10511 b += 4 10512 10513 xgb.Put32(buf[b:], uint32(Font)) 10514 b += 4 10515 10516 xgb.Put32(buf[b:], First) 10517 b += 4 10518 10519 xgb.Put32(buf[b:], Count) 10520 b += 4 10521 10522 xgb.Put32(buf[b:], ListBase) 10523 b += 4 10524 10525 return buf 10526 } 10527 10528 // VendorPrivateCookie is a cookie used only for VendorPrivate requests. 10529 type VendorPrivateCookie struct { 10530 *xgb.Cookie 10531 } 10532 10533 // VendorPrivate sends an unchecked request. 10534 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 10535 func VendorPrivate(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) VendorPrivateCookie { 10536 c.ExtLock.RLock() 10537 defer c.ExtLock.RUnlock() 10538 if _, ok := c.Extensions["GLX"]; !ok { 10539 panic("Cannot issue request 'VendorPrivate' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10540 } 10541 cookie := c.NewCookie(false, false) 10542 c.NewRequest(vendorPrivateRequest(c, VendorCode, ContextTag, Data), cookie) 10543 return VendorPrivateCookie{cookie} 10544 } 10545 10546 // VendorPrivateChecked sends a checked request. 10547 // If an error occurs, it can be retrieved using VendorPrivateCookie.Check() 10548 func VendorPrivateChecked(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) VendorPrivateCookie { 10549 c.ExtLock.RLock() 10550 defer c.ExtLock.RUnlock() 10551 if _, ok := c.Extensions["GLX"]; !ok { 10552 panic("Cannot issue request 'VendorPrivate' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10553 } 10554 cookie := c.NewCookie(true, false) 10555 c.NewRequest(vendorPrivateRequest(c, VendorCode, ContextTag, Data), cookie) 10556 return VendorPrivateCookie{cookie} 10557 } 10558 10559 // Check returns an error if one occurred for checked requests that are not expecting a reply. 10560 // This cannot be called for requests expecting a reply, nor for unchecked requests. 10561 func (cook VendorPrivateCookie) Check() error { 10562 return cook.Cookie.Check() 10563 } 10564 10565 // Write request to wire for VendorPrivate 10566 // vendorPrivateRequest writes a VendorPrivate request to a byte slice. 10567 func vendorPrivateRequest(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) []byte { 10568 size := xgb.Pad((12 + xgb.Pad((len(Data) * 1)))) 10569 b := 0 10570 buf := make([]byte, size) 10571 10572 c.ExtLock.RLock() 10573 buf[b] = c.Extensions["GLX"] 10574 c.ExtLock.RUnlock() 10575 b += 1 10576 10577 buf[b] = 16 // request opcode 10578 b += 1 10579 10580 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 10581 b += 2 10582 10583 xgb.Put32(buf[b:], VendorCode) 10584 b += 4 10585 10586 xgb.Put32(buf[b:], uint32(ContextTag)) 10587 b += 4 10588 10589 copy(buf[b:], Data[:len(Data)]) 10590 b += int(len(Data)) 10591 10592 return buf 10593 } 10594 10595 // VendorPrivateWithReplyCookie is a cookie used only for VendorPrivateWithReply requests. 10596 type VendorPrivateWithReplyCookie struct { 10597 *xgb.Cookie 10598 } 10599 10600 // VendorPrivateWithReply sends a checked request. 10601 // If an error occurs, it will be returned with the reply by calling VendorPrivateWithReplyCookie.Reply() 10602 func VendorPrivateWithReply(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) VendorPrivateWithReplyCookie { 10603 c.ExtLock.RLock() 10604 defer c.ExtLock.RUnlock() 10605 if _, ok := c.Extensions["GLX"]; !ok { 10606 panic("Cannot issue request 'VendorPrivateWithReply' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10607 } 10608 cookie := c.NewCookie(true, true) 10609 c.NewRequest(vendorPrivateWithReplyRequest(c, VendorCode, ContextTag, Data), cookie) 10610 return VendorPrivateWithReplyCookie{cookie} 10611 } 10612 10613 // VendorPrivateWithReplyUnchecked sends an unchecked request. 10614 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 10615 func VendorPrivateWithReplyUnchecked(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) VendorPrivateWithReplyCookie { 10616 c.ExtLock.RLock() 10617 defer c.ExtLock.RUnlock() 10618 if _, ok := c.Extensions["GLX"]; !ok { 10619 panic("Cannot issue request 'VendorPrivateWithReply' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10620 } 10621 cookie := c.NewCookie(false, true) 10622 c.NewRequest(vendorPrivateWithReplyRequest(c, VendorCode, ContextTag, Data), cookie) 10623 return VendorPrivateWithReplyCookie{cookie} 10624 } 10625 10626 // VendorPrivateWithReplyReply represents the data returned from a VendorPrivateWithReply request. 10627 type VendorPrivateWithReplyReply struct { 10628 Sequence uint16 // sequence number of the request for this reply 10629 Length uint32 // number of bytes in this reply 10630 // padding: 1 bytes 10631 Retval uint32 10632 Data1 []byte // size: 24 10633 Data2 []byte // size: xgb.Pad(((int(Length) * 4) * 1)) 10634 } 10635 10636 // Reply blocks and returns the reply data for a VendorPrivateWithReply request. 10637 func (cook VendorPrivateWithReplyCookie) Reply() (*VendorPrivateWithReplyReply, error) { 10638 buf, err := cook.Cookie.Reply() 10639 if err != nil { 10640 return nil, err 10641 } 10642 if buf == nil { 10643 return nil, nil 10644 } 10645 return vendorPrivateWithReplyReply(buf), nil 10646 } 10647 10648 // vendorPrivateWithReplyReply reads a byte slice into a VendorPrivateWithReplyReply value. 10649 func vendorPrivateWithReplyReply(buf []byte) *VendorPrivateWithReplyReply { 10650 v := new(VendorPrivateWithReplyReply) 10651 b := 1 // skip reply determinant 10652 10653 b += 1 // padding 10654 10655 v.Sequence = xgb.Get16(buf[b:]) 10656 b += 2 10657 10658 v.Length = xgb.Get32(buf[b:]) // 4-byte units 10659 b += 4 10660 10661 v.Retval = xgb.Get32(buf[b:]) 10662 b += 4 10663 10664 v.Data1 = make([]byte, 24) 10665 copy(v.Data1[:24], buf[b:]) 10666 b += int(24) 10667 10668 v.Data2 = make([]byte, (int(v.Length) * 4)) 10669 copy(v.Data2[:(int(v.Length)*4)], buf[b:]) 10670 b += int((int(v.Length) * 4)) 10671 10672 return v 10673 } 10674 10675 // Write request to wire for VendorPrivateWithReply 10676 // vendorPrivateWithReplyRequest writes a VendorPrivateWithReply request to a byte slice. 10677 func vendorPrivateWithReplyRequest(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) []byte { 10678 size := xgb.Pad((12 + xgb.Pad((len(Data) * 1)))) 10679 b := 0 10680 buf := make([]byte, size) 10681 10682 c.ExtLock.RLock() 10683 buf[b] = c.Extensions["GLX"] 10684 c.ExtLock.RUnlock() 10685 b += 1 10686 10687 buf[b] = 17 // request opcode 10688 b += 1 10689 10690 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 10691 b += 2 10692 10693 xgb.Put32(buf[b:], VendorCode) 10694 b += 4 10695 10696 xgb.Put32(buf[b:], uint32(ContextTag)) 10697 b += 4 10698 10699 copy(buf[b:], Data[:len(Data)]) 10700 b += int(len(Data)) 10701 10702 return buf 10703 } 10704 10705 // WaitGLCookie is a cookie used only for WaitGL requests. 10706 type WaitGLCookie struct { 10707 *xgb.Cookie 10708 } 10709 10710 // WaitGL sends an unchecked request. 10711 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 10712 func WaitGL(c *xgb.Conn, ContextTag ContextTag) WaitGLCookie { 10713 c.ExtLock.RLock() 10714 defer c.ExtLock.RUnlock() 10715 if _, ok := c.Extensions["GLX"]; !ok { 10716 panic("Cannot issue request 'WaitGL' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10717 } 10718 cookie := c.NewCookie(false, false) 10719 c.NewRequest(waitGLRequest(c, ContextTag), cookie) 10720 return WaitGLCookie{cookie} 10721 } 10722 10723 // WaitGLChecked sends a checked request. 10724 // If an error occurs, it can be retrieved using WaitGLCookie.Check() 10725 func WaitGLChecked(c *xgb.Conn, ContextTag ContextTag) WaitGLCookie { 10726 c.ExtLock.RLock() 10727 defer c.ExtLock.RUnlock() 10728 if _, ok := c.Extensions["GLX"]; !ok { 10729 panic("Cannot issue request 'WaitGL' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10730 } 10731 cookie := c.NewCookie(true, false) 10732 c.NewRequest(waitGLRequest(c, ContextTag), cookie) 10733 return WaitGLCookie{cookie} 10734 } 10735 10736 // Check returns an error if one occurred for checked requests that are not expecting a reply. 10737 // This cannot be called for requests expecting a reply, nor for unchecked requests. 10738 func (cook WaitGLCookie) Check() error { 10739 return cook.Cookie.Check() 10740 } 10741 10742 // Write request to wire for WaitGL 10743 // waitGLRequest writes a WaitGL request to a byte slice. 10744 func waitGLRequest(c *xgb.Conn, ContextTag ContextTag) []byte { 10745 size := 8 10746 b := 0 10747 buf := make([]byte, size) 10748 10749 c.ExtLock.RLock() 10750 buf[b] = c.Extensions["GLX"] 10751 c.ExtLock.RUnlock() 10752 b += 1 10753 10754 buf[b] = 8 // request opcode 10755 b += 1 10756 10757 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 10758 b += 2 10759 10760 xgb.Put32(buf[b:], uint32(ContextTag)) 10761 b += 4 10762 10763 return buf 10764 } 10765 10766 // WaitXCookie is a cookie used only for WaitX requests. 10767 type WaitXCookie struct { 10768 *xgb.Cookie 10769 } 10770 10771 // WaitX sends an unchecked request. 10772 // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. 10773 func WaitX(c *xgb.Conn, ContextTag ContextTag) WaitXCookie { 10774 c.ExtLock.RLock() 10775 defer c.ExtLock.RUnlock() 10776 if _, ok := c.Extensions["GLX"]; !ok { 10777 panic("Cannot issue request 'WaitX' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10778 } 10779 cookie := c.NewCookie(false, false) 10780 c.NewRequest(waitXRequest(c, ContextTag), cookie) 10781 return WaitXCookie{cookie} 10782 } 10783 10784 // WaitXChecked sends a checked request. 10785 // If an error occurs, it can be retrieved using WaitXCookie.Check() 10786 func WaitXChecked(c *xgb.Conn, ContextTag ContextTag) WaitXCookie { 10787 c.ExtLock.RLock() 10788 defer c.ExtLock.RUnlock() 10789 if _, ok := c.Extensions["GLX"]; !ok { 10790 panic("Cannot issue request 'WaitX' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.") 10791 } 10792 cookie := c.NewCookie(true, false) 10793 c.NewRequest(waitXRequest(c, ContextTag), cookie) 10794 return WaitXCookie{cookie} 10795 } 10796 10797 // Check returns an error if one occurred for checked requests that are not expecting a reply. 10798 // This cannot be called for requests expecting a reply, nor for unchecked requests. 10799 func (cook WaitXCookie) Check() error { 10800 return cook.Cookie.Check() 10801 } 10802 10803 // Write request to wire for WaitX 10804 // waitXRequest writes a WaitX request to a byte slice. 10805 func waitXRequest(c *xgb.Conn, ContextTag ContextTag) []byte { 10806 size := 8 10807 b := 0 10808 buf := make([]byte, size) 10809 10810 c.ExtLock.RLock() 10811 buf[b] = c.Extensions["GLX"] 10812 c.ExtLock.RUnlock() 10813 b += 1 10814 10815 buf[b] = 9 // request opcode 10816 b += 1 10817 10818 xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units 10819 b += 2 10820 10821 xgb.Put32(buf[b:], uint32(ContextTag)) 10822 b += 4 10823 10824 return buf 10825 }