10827 lines
309 KiB
Go
10827 lines
309 KiB
Go
// Package glx is the X client API for the GLX extension.
|
|
package glx
|
|
|
|
// This file is automatically generated from glx.xml. Edit at your peril!
|
|
|
|
import (
|
|
xgb "janouch.name/haven/nexgb"
|
|
|
|
"janouch.name/haven/nexgb/xproto"
|
|
)
|
|
|
|
const (
|
|
MajorVersion = 1
|
|
MinorVersion = 4
|
|
)
|
|
|
|
// Init must be called before using the GLX extension.
|
|
func Init(c *xgb.Conn) error {
|
|
reply, err := xproto.QueryExtension(c, 3, "GLX").Reply()
|
|
switch {
|
|
case err != nil:
|
|
return err
|
|
case !reply.Present:
|
|
return xgb.Errorf("No extension named GLX could be found on on the server.")
|
|
}
|
|
|
|
c.ExtLock.Lock()
|
|
c.Extensions["GLX"] = reply.MajorOpcode
|
|
c.ExtLock.Unlock()
|
|
for evNum, fun := range xgb.NewExtEventFuncs["GLX"] {
|
|
xgb.NewEventFuncs[int(reply.FirstEvent)+evNum] = fun
|
|
}
|
|
for errNum, fun := range xgb.NewExtErrorFuncs["GLX"] {
|
|
xgb.NewErrorFuncs[int(reply.FirstError)+errNum] = fun
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtEventFuncs["GLX"] = make(map[int]xgb.NewEventFun)
|
|
xgb.NewExtErrorFuncs["GLX"] = make(map[int]xgb.NewErrorFun)
|
|
}
|
|
|
|
// BadBadContext is the error number for a BadBadContext.
|
|
const BadBadContext = 0
|
|
|
|
type BadContextError GenericError
|
|
|
|
// BadContextErrorNew constructs a BadContextError value that implements xgb.Error from a byte slice.
|
|
func BadContextErrorNew(buf []byte) xgb.Error {
|
|
v := BadContextError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadContext"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadContext error.
|
|
// This is mostly used internally.
|
|
func (err BadContextError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadContext error. If no bad value exists, 0 is returned.
|
|
func (err BadContextError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadContext error.
|
|
func (err BadContextError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadContext {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][0] = BadContextErrorNew
|
|
}
|
|
|
|
// BadBadContextState is the error number for a BadBadContextState.
|
|
const BadBadContextState = 1
|
|
|
|
type BadContextStateError GenericError
|
|
|
|
// BadContextStateErrorNew constructs a BadContextStateError value that implements xgb.Error from a byte slice.
|
|
func BadContextStateErrorNew(buf []byte) xgb.Error {
|
|
v := BadContextStateError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadContextState"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadContextState error.
|
|
// This is mostly used internally.
|
|
func (err BadContextStateError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadContextState error. If no bad value exists, 0 is returned.
|
|
func (err BadContextStateError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadContextState error.
|
|
func (err BadContextStateError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadContextState {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][1] = BadContextStateErrorNew
|
|
}
|
|
|
|
// BadBadContextTag is the error number for a BadBadContextTag.
|
|
const BadBadContextTag = 4
|
|
|
|
type BadContextTagError GenericError
|
|
|
|
// BadContextTagErrorNew constructs a BadContextTagError value that implements xgb.Error from a byte slice.
|
|
func BadContextTagErrorNew(buf []byte) xgb.Error {
|
|
v := BadContextTagError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadContextTag"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadContextTag error.
|
|
// This is mostly used internally.
|
|
func (err BadContextTagError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadContextTag error. If no bad value exists, 0 is returned.
|
|
func (err BadContextTagError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadContextTag error.
|
|
func (err BadContextTagError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadContextTag {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][4] = BadContextTagErrorNew
|
|
}
|
|
|
|
// BadBadCurrentDrawable is the error number for a BadBadCurrentDrawable.
|
|
const BadBadCurrentDrawable = 11
|
|
|
|
type BadCurrentDrawableError GenericError
|
|
|
|
// BadCurrentDrawableErrorNew constructs a BadCurrentDrawableError value that implements xgb.Error from a byte slice.
|
|
func BadCurrentDrawableErrorNew(buf []byte) xgb.Error {
|
|
v := BadCurrentDrawableError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadCurrentDrawable"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadCurrentDrawable error.
|
|
// This is mostly used internally.
|
|
func (err BadCurrentDrawableError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadCurrentDrawable error. If no bad value exists, 0 is returned.
|
|
func (err BadCurrentDrawableError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadCurrentDrawable error.
|
|
func (err BadCurrentDrawableError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadCurrentDrawable {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][11] = BadCurrentDrawableErrorNew
|
|
}
|
|
|
|
// BadBadCurrentWindow is the error number for a BadBadCurrentWindow.
|
|
const BadBadCurrentWindow = 5
|
|
|
|
type BadCurrentWindowError GenericError
|
|
|
|
// BadCurrentWindowErrorNew constructs a BadCurrentWindowError value that implements xgb.Error from a byte slice.
|
|
func BadCurrentWindowErrorNew(buf []byte) xgb.Error {
|
|
v := BadCurrentWindowError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadCurrentWindow"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadCurrentWindow error.
|
|
// This is mostly used internally.
|
|
func (err BadCurrentWindowError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadCurrentWindow error. If no bad value exists, 0 is returned.
|
|
func (err BadCurrentWindowError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadCurrentWindow error.
|
|
func (err BadCurrentWindowError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadCurrentWindow {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][5] = BadCurrentWindowErrorNew
|
|
}
|
|
|
|
// BadBadDrawable is the error number for a BadBadDrawable.
|
|
const BadBadDrawable = 2
|
|
|
|
type BadDrawableError GenericError
|
|
|
|
// BadDrawableErrorNew constructs a BadDrawableError value that implements xgb.Error from a byte slice.
|
|
func BadDrawableErrorNew(buf []byte) xgb.Error {
|
|
v := BadDrawableError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadDrawable"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadDrawable error.
|
|
// This is mostly used internally.
|
|
func (err BadDrawableError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadDrawable error. If no bad value exists, 0 is returned.
|
|
func (err BadDrawableError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadDrawable error.
|
|
func (err BadDrawableError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadDrawable {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][2] = BadDrawableErrorNew
|
|
}
|
|
|
|
// BadBadFBConfig is the error number for a BadBadFBConfig.
|
|
const BadBadFBConfig = 9
|
|
|
|
type BadFBConfigError GenericError
|
|
|
|
// BadFBConfigErrorNew constructs a BadFBConfigError value that implements xgb.Error from a byte slice.
|
|
func BadFBConfigErrorNew(buf []byte) xgb.Error {
|
|
v := BadFBConfigError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadFBConfig"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadFBConfig error.
|
|
// This is mostly used internally.
|
|
func (err BadFBConfigError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadFBConfig error. If no bad value exists, 0 is returned.
|
|
func (err BadFBConfigError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadFBConfig error.
|
|
func (err BadFBConfigError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadFBConfig {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][9] = BadFBConfigErrorNew
|
|
}
|
|
|
|
// BadBadLargeRequest is the error number for a BadBadLargeRequest.
|
|
const BadBadLargeRequest = 7
|
|
|
|
type BadLargeRequestError GenericError
|
|
|
|
// BadLargeRequestErrorNew constructs a BadLargeRequestError value that implements xgb.Error from a byte slice.
|
|
func BadLargeRequestErrorNew(buf []byte) xgb.Error {
|
|
v := BadLargeRequestError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadLargeRequest"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadLargeRequest error.
|
|
// This is mostly used internally.
|
|
func (err BadLargeRequestError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadLargeRequest error. If no bad value exists, 0 is returned.
|
|
func (err BadLargeRequestError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadLargeRequest error.
|
|
func (err BadLargeRequestError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadLargeRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][7] = BadLargeRequestErrorNew
|
|
}
|
|
|
|
// BadBadPbuffer is the error number for a BadBadPbuffer.
|
|
const BadBadPbuffer = 10
|
|
|
|
type BadPbufferError GenericError
|
|
|
|
// BadPbufferErrorNew constructs a BadPbufferError value that implements xgb.Error from a byte slice.
|
|
func BadPbufferErrorNew(buf []byte) xgb.Error {
|
|
v := BadPbufferError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadPbuffer"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadPbuffer error.
|
|
// This is mostly used internally.
|
|
func (err BadPbufferError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadPbuffer error. If no bad value exists, 0 is returned.
|
|
func (err BadPbufferError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadPbuffer error.
|
|
func (err BadPbufferError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadPbuffer {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][10] = BadPbufferErrorNew
|
|
}
|
|
|
|
// BadBadPixmap is the error number for a BadBadPixmap.
|
|
const BadBadPixmap = 3
|
|
|
|
type BadPixmapError GenericError
|
|
|
|
// BadPixmapErrorNew constructs a BadPixmapError value that implements xgb.Error from a byte slice.
|
|
func BadPixmapErrorNew(buf []byte) xgb.Error {
|
|
v := BadPixmapError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadPixmap"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadPixmap error.
|
|
// This is mostly used internally.
|
|
func (err BadPixmapError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadPixmap error. If no bad value exists, 0 is returned.
|
|
func (err BadPixmapError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadPixmap error.
|
|
func (err BadPixmapError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadPixmap {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][3] = BadPixmapErrorNew
|
|
}
|
|
|
|
// BadBadRenderRequest is the error number for a BadBadRenderRequest.
|
|
const BadBadRenderRequest = 6
|
|
|
|
type BadRenderRequestError GenericError
|
|
|
|
// BadRenderRequestErrorNew constructs a BadRenderRequestError value that implements xgb.Error from a byte slice.
|
|
func BadRenderRequestErrorNew(buf []byte) xgb.Error {
|
|
v := BadRenderRequestError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadRenderRequest"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadRenderRequest error.
|
|
// This is mostly used internally.
|
|
func (err BadRenderRequestError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadRenderRequest error. If no bad value exists, 0 is returned.
|
|
func (err BadRenderRequestError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadRenderRequest error.
|
|
func (err BadRenderRequestError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadRenderRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][6] = BadRenderRequestErrorNew
|
|
}
|
|
|
|
// BadBadWindow is the error number for a BadBadWindow.
|
|
const BadBadWindow = 12
|
|
|
|
type BadWindowError GenericError
|
|
|
|
// BadWindowErrorNew constructs a BadWindowError value that implements xgb.Error from a byte slice.
|
|
func BadWindowErrorNew(buf []byte) xgb.Error {
|
|
v := BadWindowError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "BadWindow"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadBadWindow error.
|
|
// This is mostly used internally.
|
|
func (err BadWindowError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadBadWindow error. If no bad value exists, 0 is returned.
|
|
func (err BadWindowError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadBadWindow error.
|
|
func (err BadWindowError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadBadWindow {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][12] = BadWindowErrorNew
|
|
}
|
|
|
|
type Bool32 uint32
|
|
|
|
// BufferSwapComplete is the event number for a BufferSwapCompleteEvent.
|
|
const BufferSwapComplete = 1
|
|
|
|
type BufferSwapCompleteEvent struct {
|
|
Sequence uint16
|
|
// padding: 1 bytes
|
|
EventType uint16
|
|
// padding: 2 bytes
|
|
Drawable Drawable
|
|
UstHi uint32
|
|
UstLo uint32
|
|
MscHi uint32
|
|
MscLo uint32
|
|
Sbc uint32
|
|
}
|
|
|
|
// BufferSwapCompleteEventNew constructs a BufferSwapCompleteEvent value that implements xgb.Event from a byte slice.
|
|
func BufferSwapCompleteEventNew(buf []byte) xgb.Event {
|
|
v := BufferSwapCompleteEvent{}
|
|
b := 1 // don't read event number
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.EventType = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
b += 2 // padding
|
|
|
|
v.Drawable = Drawable(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
v.UstHi = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.UstLo = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.MscHi = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.MscLo = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Sbc = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
return v
|
|
}
|
|
|
|
// Bytes writes a BufferSwapCompleteEvent value to a byte slice.
|
|
func (v BufferSwapCompleteEvent) Bytes() []byte {
|
|
buf := make([]byte, 32)
|
|
b := 0
|
|
|
|
// write event number
|
|
buf[b] = 1
|
|
b += 1
|
|
|
|
b += 1 // padding
|
|
|
|
b += 2 // skip sequence number
|
|
|
|
xgb.Put16(buf[b:], v.EventType)
|
|
b += 2
|
|
|
|
b += 2 // padding
|
|
|
|
xgb.Put32(buf[b:], uint32(v.Drawable))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], v.UstHi)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], v.UstLo)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], v.MscHi)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], v.MscLo)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], v.Sbc)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BufferSwapComplete event.
|
|
// Events without a sequence number (KeymapNotify) return 0.
|
|
// This is mostly used internally.
|
|
func (v BufferSwapCompleteEvent) SequenceId() uint16 {
|
|
return v.Sequence
|
|
}
|
|
|
|
// String is a rudimentary string representation of BufferSwapCompleteEvent.
|
|
func (v BufferSwapCompleteEvent) String() string {
|
|
fieldVals := make([]string, 0, 9)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("EventType: %d", v.EventType))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Drawable: %d", v.Drawable))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("UstHi: %d", v.UstHi))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("UstLo: %d", v.UstLo))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MscHi: %d", v.MscHi))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MscLo: %d", v.MscLo))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sbc: %d", v.Sbc))
|
|
return "BufferSwapComplete {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtEventFuncs["GLX"][1] = BufferSwapCompleteEventNew
|
|
}
|
|
|
|
type Context uint32
|
|
|
|
func NewContextId(c *xgb.Conn) (Context, error) {
|
|
id, err := c.NewId()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return Context(id), nil
|
|
}
|
|
|
|
type ContextTag uint32
|
|
|
|
type Drawable uint32
|
|
|
|
func NewDrawableId(c *xgb.Conn) (Drawable, error) {
|
|
id, err := c.NewId()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return Drawable(id), nil
|
|
}
|
|
|
|
type Fbconfig uint32
|
|
|
|
func NewFbconfigId(c *xgb.Conn) (Fbconfig, error) {
|
|
id, err := c.NewId()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return Fbconfig(id), nil
|
|
}
|
|
|
|
type Float32 float64
|
|
|
|
type Float64 float64
|
|
|
|
// BadGLXBadProfileARB is the error number for a BadGLXBadProfileARB.
|
|
const BadGLXBadProfileARB = 13
|
|
|
|
type GLXBadProfileARBError GenericError
|
|
|
|
// GLXBadProfileARBErrorNew constructs a GLXBadProfileARBError value that implements xgb.Error from a byte slice.
|
|
func GLXBadProfileARBErrorNew(buf []byte) xgb.Error {
|
|
v := GLXBadProfileARBError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "GLXBadProfileARB"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadGLXBadProfileARB error.
|
|
// This is mostly used internally.
|
|
func (err GLXBadProfileARBError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadGLXBadProfileARB error. If no bad value exists, 0 is returned.
|
|
func (err GLXBadProfileARBError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadGLXBadProfileARB error.
|
|
func (err GLXBadProfileARBError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadGLXBadProfileARB {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][13] = GLXBadProfileARBErrorNew
|
|
}
|
|
|
|
const (
|
|
GcGlCurrentBit = 1
|
|
GcGlPointBit = 2
|
|
GcGlLineBit = 4
|
|
GcGlPolygonBit = 8
|
|
GcGlPolygonStippleBit = 16
|
|
GcGlPixelModeBit = 32
|
|
GcGlLightingBit = 64
|
|
GcGlFogBit = 128
|
|
GcGlDepthBufferBit = 256
|
|
GcGlAccumBufferBit = 512
|
|
GcGlStencilBufferBit = 1024
|
|
GcGlViewportBit = 2048
|
|
GcGlTransformBit = 4096
|
|
GcGlEnableBit = 8192
|
|
GcGlColorBufferBit = 16384
|
|
GcGlHintBit = 32768
|
|
GcGlEvalBit = 65536
|
|
GcGlListBit = 131072
|
|
GcGlTextureBit = 262144
|
|
GcGlScissorBit = 524288
|
|
GcGlAllAttribBits = 16777215
|
|
)
|
|
|
|
// BadGeneric is the error number for a BadGeneric.
|
|
const BadGeneric = -1
|
|
|
|
type GenericError struct {
|
|
Sequence uint16
|
|
NiceName string
|
|
BadValue uint32
|
|
MinorOpcode uint16
|
|
MajorOpcode byte
|
|
// padding: 21 bytes
|
|
}
|
|
|
|
// GenericErrorNew constructs a GenericError value that implements xgb.Error from a byte slice.
|
|
func GenericErrorNew(buf []byte) xgb.Error {
|
|
v := GenericError{}
|
|
v.NiceName = "Generic"
|
|
|
|
b := 1 // skip error determinant
|
|
b += 1 // don't read error number
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.BadValue = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.MinorOpcode = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.MajorOpcode = buf[b]
|
|
b += 1
|
|
|
|
b += 21 // padding
|
|
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadGeneric error.
|
|
// This is mostly used internally.
|
|
func (err GenericError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadGeneric error. If no bad value exists, 0 is returned.
|
|
func (err GenericError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadGeneric error.
|
|
|
|
func (err GenericError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadGeneric {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][-1] = GenericErrorNew
|
|
}
|
|
|
|
const (
|
|
PbcdtWindow = 32793
|
|
PbcdtPbuffer = 32794
|
|
)
|
|
|
|
const (
|
|
PbcetDamaged = 32791
|
|
PbcetSaved = 32792
|
|
)
|
|
|
|
type Pbuffer uint32
|
|
|
|
func NewPbufferId(c *xgb.Conn) (Pbuffer, error) {
|
|
id, err := c.NewId()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return Pbuffer(id), nil
|
|
}
|
|
|
|
// PbufferClobber is the event number for a PbufferClobberEvent.
|
|
const PbufferClobber = 0
|
|
|
|
type PbufferClobberEvent struct {
|
|
Sequence uint16
|
|
// padding: 1 bytes
|
|
EventType uint16
|
|
DrawType uint16
|
|
Drawable Drawable
|
|
BMask uint32
|
|
AuxBuffer uint16
|
|
X uint16
|
|
Y uint16
|
|
Width uint16
|
|
Height uint16
|
|
Count uint16
|
|
// padding: 4 bytes
|
|
}
|
|
|
|
// PbufferClobberEventNew constructs a PbufferClobberEvent value that implements xgb.Event from a byte slice.
|
|
func PbufferClobberEventNew(buf []byte) xgb.Event {
|
|
v := PbufferClobberEvent{}
|
|
b := 1 // don't read event number
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.EventType = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.DrawType = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Drawable = Drawable(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
v.BMask = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.AuxBuffer = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.X = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Y = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Width = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Height = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Count = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
b += 4 // padding
|
|
|
|
return v
|
|
}
|
|
|
|
// Bytes writes a PbufferClobberEvent value to a byte slice.
|
|
func (v PbufferClobberEvent) Bytes() []byte {
|
|
buf := make([]byte, 32)
|
|
b := 0
|
|
|
|
// write event number
|
|
buf[b] = 0
|
|
b += 1
|
|
|
|
b += 1 // padding
|
|
|
|
b += 2 // skip sequence number
|
|
|
|
xgb.Put16(buf[b:], v.EventType)
|
|
b += 2
|
|
|
|
xgb.Put16(buf[b:], v.DrawType)
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(v.Drawable))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], v.BMask)
|
|
b += 4
|
|
|
|
xgb.Put16(buf[b:], v.AuxBuffer)
|
|
b += 2
|
|
|
|
xgb.Put16(buf[b:], v.X)
|
|
b += 2
|
|
|
|
xgb.Put16(buf[b:], v.Y)
|
|
b += 2
|
|
|
|
xgb.Put16(buf[b:], v.Width)
|
|
b += 2
|
|
|
|
xgb.Put16(buf[b:], v.Height)
|
|
b += 2
|
|
|
|
xgb.Put16(buf[b:], v.Count)
|
|
b += 2
|
|
|
|
b += 4 // padding
|
|
|
|
return buf
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the PbufferClobber event.
|
|
// Events without a sequence number (KeymapNotify) return 0.
|
|
// This is mostly used internally.
|
|
func (v PbufferClobberEvent) SequenceId() uint16 {
|
|
return v.Sequence
|
|
}
|
|
|
|
// String is a rudimentary string representation of PbufferClobberEvent.
|
|
func (v PbufferClobberEvent) String() string {
|
|
fieldVals := make([]string, 0, 12)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("EventType: %d", v.EventType))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("DrawType: %d", v.DrawType))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Drawable: %d", v.Drawable))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BMask: %d", v.BMask))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("AuxBuffer: %d", v.AuxBuffer))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Count: %d", v.Count))
|
|
return "PbufferClobber {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtEventFuncs["GLX"][0] = PbufferClobberEventNew
|
|
}
|
|
|
|
type Pixmap uint32
|
|
|
|
func NewPixmapId(c *xgb.Conn) (Pixmap, error) {
|
|
id, err := c.NewId()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return Pixmap(id), nil
|
|
}
|
|
|
|
const (
|
|
RmGlRender = 7168
|
|
RmGlFeedback = 7169
|
|
RmGlSelect = 7170
|
|
)
|
|
|
|
// BadUnsupportedPrivateRequest is the error number for a BadUnsupportedPrivateRequest.
|
|
const BadUnsupportedPrivateRequest = 8
|
|
|
|
type UnsupportedPrivateRequestError GenericError
|
|
|
|
// UnsupportedPrivateRequestErrorNew constructs a UnsupportedPrivateRequestError value that implements xgb.Error from a byte slice.
|
|
func UnsupportedPrivateRequestErrorNew(buf []byte) xgb.Error {
|
|
v := UnsupportedPrivateRequestError(GenericErrorNew(buf).(GenericError))
|
|
v.NiceName = "UnsupportedPrivateRequest"
|
|
return v
|
|
}
|
|
|
|
// SequenceId returns the sequence id attached to the BadUnsupportedPrivateRequest error.
|
|
// This is mostly used internally.
|
|
func (err UnsupportedPrivateRequestError) SequenceId() uint16 {
|
|
return err.Sequence
|
|
}
|
|
|
|
// BadId returns the 'BadValue' number if one exists for the BadUnsupportedPrivateRequest error. If no bad value exists, 0 is returned.
|
|
func (err UnsupportedPrivateRequestError) BadId() uint32 {
|
|
return 0
|
|
}
|
|
|
|
// Error returns a rudimentary string representation of the BadUnsupportedPrivateRequest error.
|
|
func (err UnsupportedPrivateRequestError) Error() string {
|
|
fieldVals := make([]string, 0, 4)
|
|
fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
|
|
fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
|
|
fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
|
|
return "BadUnsupportedPrivateRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
|
|
}
|
|
|
|
func init() {
|
|
xgb.NewExtErrorFuncs["GLX"][8] = UnsupportedPrivateRequestErrorNew
|
|
}
|
|
|
|
type Window uint32
|
|
|
|
func NewWindowId(c *xgb.Conn) (Window, error) {
|
|
id, err := c.NewId()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return Window(id), nil
|
|
}
|
|
|
|
// Skipping definition for base type 'Bool'
|
|
|
|
// Skipping definition for base type 'Byte'
|
|
|
|
// Skipping definition for base type 'Card8'
|
|
|
|
// Skipping definition for base type 'Char'
|
|
|
|
// Skipping definition for base type 'Void'
|
|
|
|
// Skipping definition for base type 'Double'
|
|
|
|
// Skipping definition for base type 'Float'
|
|
|
|
// Skipping definition for base type 'Int16'
|
|
|
|
// Skipping definition for base type 'Int32'
|
|
|
|
// Skipping definition for base type 'Int8'
|
|
|
|
// Skipping definition for base type 'Card16'
|
|
|
|
// Skipping definition for base type 'Card32'
|
|
|
|
// AreTexturesResidentCookie is a cookie used only for AreTexturesResident requests.
|
|
type AreTexturesResidentCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// AreTexturesResident sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling AreTexturesResidentCookie.Reply.
|
|
func AreTexturesResident(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) AreTexturesResidentCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'AreTexturesResident' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(areTexturesResidentRequest(c, ContextTag, N, Textures), cookie)
|
|
return AreTexturesResidentCookie{cookie}
|
|
}
|
|
|
|
// AreTexturesResidentUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func AreTexturesResidentUnchecked(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) AreTexturesResidentCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'AreTexturesResident' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(areTexturesResidentRequest(c, ContextTag, N, Textures), cookie)
|
|
return AreTexturesResidentCookie{cookie}
|
|
}
|
|
|
|
// AreTexturesResidentReply represents the data returned from a AreTexturesResident request.
|
|
type AreTexturesResidentReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
RetVal Bool32
|
|
// padding: 20 bytes
|
|
Data []bool // size: xgb.Pad(((int(Length) * 4) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a AreTexturesResident request.
|
|
func (cook AreTexturesResidentCookie) Reply() (*AreTexturesResidentReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return areTexturesResidentReply(buf), nil
|
|
}
|
|
|
|
// areTexturesResidentReply reads a byte slice into a AreTexturesResidentReply value.
|
|
func areTexturesResidentReply(buf []byte) *AreTexturesResidentReply {
|
|
v := new(AreTexturesResidentReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.RetVal = Bool32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 20 // padding
|
|
|
|
v.Data = make([]bool, (int(v.Length) * 4))
|
|
for i := 0; i < int((int(v.Length) * 4)); i++ {
|
|
if buf[b] == 1 {
|
|
v.Data[i] = true
|
|
} else {
|
|
v.Data[i] = false
|
|
}
|
|
b += 1
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// areTexturesResidentRequest writes a AreTexturesResident request to a byte slice for transfer.
|
|
func areTexturesResidentRequest(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) []byte {
|
|
size := xgb.Pad((12 + xgb.Pad((int(N) * 4))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 143 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(N))
|
|
b += 4
|
|
|
|
for i := 0; i < int(N); i++ {
|
|
xgb.Put32(buf[b:], Textures[i])
|
|
b += 4
|
|
}
|
|
|
|
return buf
|
|
}
|
|
|
|
// ChangeDrawableAttributesCookie is a cookie used only for ChangeDrawableAttributes requests.
|
|
type ChangeDrawableAttributesCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// ChangeDrawableAttributes sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func ChangeDrawableAttributes(c *xgb.Conn, Drawable Drawable, NumAttribs uint32, Attribs []uint32) ChangeDrawableAttributesCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'ChangeDrawableAttributes' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(changeDrawableAttributesRequest(c, Drawable, NumAttribs, Attribs), cookie)
|
|
return ChangeDrawableAttributesCookie{cookie}
|
|
}
|
|
|
|
// ChangeDrawableAttributesChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using ChangeDrawableAttributesCookie.Check.
|
|
func ChangeDrawableAttributesChecked(c *xgb.Conn, Drawable Drawable, NumAttribs uint32, Attribs []uint32) ChangeDrawableAttributesCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'ChangeDrawableAttributes' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(changeDrawableAttributesRequest(c, Drawable, NumAttribs, Attribs), cookie)
|
|
return ChangeDrawableAttributesCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook ChangeDrawableAttributesCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// changeDrawableAttributesRequest writes a ChangeDrawableAttributes request to a byte slice for transfer.
|
|
func changeDrawableAttributesRequest(c *xgb.Conn, Drawable Drawable, NumAttribs uint32, Attribs []uint32) []byte {
|
|
size := xgb.Pad((12 + xgb.Pad(((int(NumAttribs) * 2) * 4))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 30 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Drawable))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], NumAttribs)
|
|
b += 4
|
|
|
|
for i := 0; i < int((int(NumAttribs) * 2)); i++ {
|
|
xgb.Put32(buf[b:], Attribs[i])
|
|
b += 4
|
|
}
|
|
|
|
return buf
|
|
}
|
|
|
|
// ClientInfoCookie is a cookie used only for ClientInfo requests.
|
|
type ClientInfoCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// ClientInfo sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func ClientInfo(c *xgb.Conn, MajorVersion, MinorVersion, StrLen uint32, String string) ClientInfoCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'ClientInfo' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(clientInfoRequest(c, MajorVersion, MinorVersion, StrLen, String), cookie)
|
|
return ClientInfoCookie{cookie}
|
|
}
|
|
|
|
// ClientInfoChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using ClientInfoCookie.Check.
|
|
func ClientInfoChecked(c *xgb.Conn, MajorVersion, MinorVersion, StrLen uint32, String string) ClientInfoCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'ClientInfo' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(clientInfoRequest(c, MajorVersion, MinorVersion, StrLen, String), cookie)
|
|
return ClientInfoCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook ClientInfoCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// clientInfoRequest writes a ClientInfo request to a byte slice for transfer.
|
|
func clientInfoRequest(c *xgb.Conn, MajorVersion, MinorVersion, StrLen uint32, String string) []byte {
|
|
size := xgb.Pad((16 + xgb.Pad((int(StrLen) * 1))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 20 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], MajorVersion)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], MinorVersion)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], StrLen)
|
|
b += 4
|
|
|
|
copy(buf[b:], String[:StrLen])
|
|
b += int(StrLen)
|
|
|
|
return buf
|
|
}
|
|
|
|
// CopyContextCookie is a cookie used only for CopyContext requests.
|
|
type CopyContextCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// CopyContext sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func CopyContext(c *xgb.Conn, Src, Dest Context, Mask uint32, SrcContextTag ContextTag) CopyContextCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CopyContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(copyContextRequest(c, Src, Dest, Mask, SrcContextTag), cookie)
|
|
return CopyContextCookie{cookie}
|
|
}
|
|
|
|
// CopyContextChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using CopyContextCookie.Check.
|
|
func CopyContextChecked(c *xgb.Conn, Src, Dest Context, Mask uint32, SrcContextTag ContextTag) CopyContextCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CopyContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(copyContextRequest(c, Src, Dest, Mask, SrcContextTag), cookie)
|
|
return CopyContextCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook CopyContextCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// copyContextRequest writes a CopyContext request to a byte slice for transfer.
|
|
func copyContextRequest(c *xgb.Conn, Src, Dest Context, Mask uint32, SrcContextTag ContextTag) []byte {
|
|
size := 20
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 10 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Src))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Dest))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Mask)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(SrcContextTag))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// CreateContextCookie is a cookie used only for CreateContext requests.
|
|
type CreateContextCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// CreateContext sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func CreateContext(c *xgb.Conn, Context Context, Visual xproto.Visualid, Screen uint32, ShareList Context, IsDirect bool) CreateContextCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreateContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(createContextRequest(c, Context, Visual, Screen, ShareList, IsDirect), cookie)
|
|
return CreateContextCookie{cookie}
|
|
}
|
|
|
|
// CreateContextChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using CreateContextCookie.Check.
|
|
func CreateContextChecked(c *xgb.Conn, Context Context, Visual xproto.Visualid, Screen uint32, ShareList Context, IsDirect bool) CreateContextCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreateContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(createContextRequest(c, Context, Visual, Screen, ShareList, IsDirect), cookie)
|
|
return CreateContextCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook CreateContextCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// createContextRequest writes a CreateContext request to a byte slice for transfer.
|
|
func createContextRequest(c *xgb.Conn, Context Context, Visual xproto.Visualid, Screen uint32, ShareList Context, IsDirect bool) []byte {
|
|
size := 24
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 3 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Context))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Visual))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Screen)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(ShareList))
|
|
b += 4
|
|
|
|
if IsDirect {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
b += 3 // padding
|
|
|
|
return buf
|
|
}
|
|
|
|
// CreateContextAttribsARBCookie is a cookie used only for CreateContextAttribsARB requests.
|
|
type CreateContextAttribsARBCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// CreateContextAttribsARB sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func CreateContextAttribsARB(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen uint32, ShareList Context, IsDirect bool, NumAttribs uint32, Attribs []uint32) CreateContextAttribsARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreateContextAttribsARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(createContextAttribsARBRequest(c, Context, Fbconfig, Screen, ShareList, IsDirect, NumAttribs, Attribs), cookie)
|
|
return CreateContextAttribsARBCookie{cookie}
|
|
}
|
|
|
|
// CreateContextAttribsARBChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using CreateContextAttribsARBCookie.Check.
|
|
func CreateContextAttribsARBChecked(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen uint32, ShareList Context, IsDirect bool, NumAttribs uint32, Attribs []uint32) CreateContextAttribsARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreateContextAttribsARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(createContextAttribsARBRequest(c, Context, Fbconfig, Screen, ShareList, IsDirect, NumAttribs, Attribs), cookie)
|
|
return CreateContextAttribsARBCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook CreateContextAttribsARBCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// createContextAttribsARBRequest writes a CreateContextAttribsARB request to a byte slice for transfer.
|
|
func createContextAttribsARBRequest(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen uint32, ShareList Context, IsDirect bool, NumAttribs uint32, Attribs []uint32) []byte {
|
|
size := xgb.Pad((28 + xgb.Pad(((int(NumAttribs) * 2) * 4))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 34 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Context))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Fbconfig))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Screen)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(ShareList))
|
|
b += 4
|
|
|
|
if IsDirect {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
b += 3 // padding
|
|
|
|
xgb.Put32(buf[b:], NumAttribs)
|
|
b += 4
|
|
|
|
for i := 0; i < int((int(NumAttribs) * 2)); i++ {
|
|
xgb.Put32(buf[b:], Attribs[i])
|
|
b += 4
|
|
}
|
|
|
|
return buf
|
|
}
|
|
|
|
// CreateGLXPixmapCookie is a cookie used only for CreateGLXPixmap requests.
|
|
type CreateGLXPixmapCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// CreateGLXPixmap sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func CreateGLXPixmap(c *xgb.Conn, Screen uint32, Visual xproto.Visualid, Pixmap xproto.Pixmap, GlxPixmap Pixmap) CreateGLXPixmapCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreateGLXPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(createGLXPixmapRequest(c, Screen, Visual, Pixmap, GlxPixmap), cookie)
|
|
return CreateGLXPixmapCookie{cookie}
|
|
}
|
|
|
|
// CreateGLXPixmapChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using CreateGLXPixmapCookie.Check.
|
|
func CreateGLXPixmapChecked(c *xgb.Conn, Screen uint32, Visual xproto.Visualid, Pixmap xproto.Pixmap, GlxPixmap Pixmap) CreateGLXPixmapCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreateGLXPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(createGLXPixmapRequest(c, Screen, Visual, Pixmap, GlxPixmap), cookie)
|
|
return CreateGLXPixmapCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook CreateGLXPixmapCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// createGLXPixmapRequest writes a CreateGLXPixmap request to a byte slice for transfer.
|
|
func createGLXPixmapRequest(c *xgb.Conn, Screen uint32, Visual xproto.Visualid, Pixmap xproto.Pixmap, GlxPixmap Pixmap) []byte {
|
|
size := 20
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 13 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], Screen)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Visual))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Pixmap))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(GlxPixmap))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// CreateNewContextCookie is a cookie used only for CreateNewContext requests.
|
|
type CreateNewContextCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// CreateNewContext sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func CreateNewContext(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen, RenderType uint32, ShareList Context, IsDirect bool) CreateNewContextCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreateNewContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(createNewContextRequest(c, Context, Fbconfig, Screen, RenderType, ShareList, IsDirect), cookie)
|
|
return CreateNewContextCookie{cookie}
|
|
}
|
|
|
|
// CreateNewContextChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using CreateNewContextCookie.Check.
|
|
func CreateNewContextChecked(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen, RenderType uint32, ShareList Context, IsDirect bool) CreateNewContextCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreateNewContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(createNewContextRequest(c, Context, Fbconfig, Screen, RenderType, ShareList, IsDirect), cookie)
|
|
return CreateNewContextCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook CreateNewContextCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// createNewContextRequest writes a CreateNewContext request to a byte slice for transfer.
|
|
func createNewContextRequest(c *xgb.Conn, Context Context, Fbconfig Fbconfig, Screen, RenderType uint32, ShareList Context, IsDirect bool) []byte {
|
|
size := 28
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 24 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Context))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Fbconfig))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Screen)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], RenderType)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(ShareList))
|
|
b += 4
|
|
|
|
if IsDirect {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
b += 3 // padding
|
|
|
|
return buf
|
|
}
|
|
|
|
// CreatePbufferCookie is a cookie used only for CreatePbuffer requests.
|
|
type CreatePbufferCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// CreatePbuffer sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func CreatePbuffer(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pbuffer Pbuffer, NumAttribs uint32, Attribs []uint32) CreatePbufferCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreatePbuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(createPbufferRequest(c, Screen, Fbconfig, Pbuffer, NumAttribs, Attribs), cookie)
|
|
return CreatePbufferCookie{cookie}
|
|
}
|
|
|
|
// CreatePbufferChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using CreatePbufferCookie.Check.
|
|
func CreatePbufferChecked(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pbuffer Pbuffer, NumAttribs uint32, Attribs []uint32) CreatePbufferCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreatePbuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(createPbufferRequest(c, Screen, Fbconfig, Pbuffer, NumAttribs, Attribs), cookie)
|
|
return CreatePbufferCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook CreatePbufferCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// createPbufferRequest writes a CreatePbuffer request to a byte slice for transfer.
|
|
func createPbufferRequest(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pbuffer Pbuffer, NumAttribs uint32, Attribs []uint32) []byte {
|
|
size := xgb.Pad((20 + xgb.Pad(((int(NumAttribs) * 2) * 4))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 27 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], Screen)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Fbconfig))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Pbuffer))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], NumAttribs)
|
|
b += 4
|
|
|
|
for i := 0; i < int((int(NumAttribs) * 2)); i++ {
|
|
xgb.Put32(buf[b:], Attribs[i])
|
|
b += 4
|
|
}
|
|
|
|
return buf
|
|
}
|
|
|
|
// CreatePixmapCookie is a cookie used only for CreatePixmap requests.
|
|
type CreatePixmapCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// CreatePixmap sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func CreatePixmap(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pixmap xproto.Pixmap, GlxPixmap Pixmap, NumAttribs uint32, Attribs []uint32) CreatePixmapCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreatePixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(createPixmapRequest(c, Screen, Fbconfig, Pixmap, GlxPixmap, NumAttribs, Attribs), cookie)
|
|
return CreatePixmapCookie{cookie}
|
|
}
|
|
|
|
// CreatePixmapChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using CreatePixmapCookie.Check.
|
|
func CreatePixmapChecked(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pixmap xproto.Pixmap, GlxPixmap Pixmap, NumAttribs uint32, Attribs []uint32) CreatePixmapCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreatePixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(createPixmapRequest(c, Screen, Fbconfig, Pixmap, GlxPixmap, NumAttribs, Attribs), cookie)
|
|
return CreatePixmapCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook CreatePixmapCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// createPixmapRequest writes a CreatePixmap request to a byte slice for transfer.
|
|
func createPixmapRequest(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Pixmap xproto.Pixmap, GlxPixmap Pixmap, NumAttribs uint32, Attribs []uint32) []byte {
|
|
size := xgb.Pad((24 + xgb.Pad(((int(NumAttribs) * 2) * 4))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 22 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], Screen)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Fbconfig))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Pixmap))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(GlxPixmap))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], NumAttribs)
|
|
b += 4
|
|
|
|
for i := 0; i < int((int(NumAttribs) * 2)); i++ {
|
|
xgb.Put32(buf[b:], Attribs[i])
|
|
b += 4
|
|
}
|
|
|
|
return buf
|
|
}
|
|
|
|
// CreateWindowCookie is a cookie used only for CreateWindow requests.
|
|
type CreateWindowCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// CreateWindow sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func CreateWindow(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Window xproto.Window, GlxWindow Window, NumAttribs uint32, Attribs []uint32) CreateWindowCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreateWindow' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(createWindowRequest(c, Screen, Fbconfig, Window, GlxWindow, NumAttribs, Attribs), cookie)
|
|
return CreateWindowCookie{cookie}
|
|
}
|
|
|
|
// CreateWindowChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using CreateWindowCookie.Check.
|
|
func CreateWindowChecked(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Window xproto.Window, GlxWindow Window, NumAttribs uint32, Attribs []uint32) CreateWindowCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'CreateWindow' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(createWindowRequest(c, Screen, Fbconfig, Window, GlxWindow, NumAttribs, Attribs), cookie)
|
|
return CreateWindowCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook CreateWindowCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// createWindowRequest writes a CreateWindow request to a byte slice for transfer.
|
|
func createWindowRequest(c *xgb.Conn, Screen uint32, Fbconfig Fbconfig, Window xproto.Window, GlxWindow Window, NumAttribs uint32, Attribs []uint32) []byte {
|
|
size := xgb.Pad((24 + xgb.Pad(((int(NumAttribs) * 2) * 4))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 31 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], Screen)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Fbconfig))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Window))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(GlxWindow))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], NumAttribs)
|
|
b += 4
|
|
|
|
for i := 0; i < int((int(NumAttribs) * 2)); i++ {
|
|
xgb.Put32(buf[b:], Attribs[i])
|
|
b += 4
|
|
}
|
|
|
|
return buf
|
|
}
|
|
|
|
// DeleteListsCookie is a cookie used only for DeleteLists requests.
|
|
type DeleteListsCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// DeleteLists sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func DeleteLists(c *xgb.Conn, ContextTag ContextTag, List uint32, Range int32) DeleteListsCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DeleteLists' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(deleteListsRequest(c, ContextTag, List, Range), cookie)
|
|
return DeleteListsCookie{cookie}
|
|
}
|
|
|
|
// DeleteListsChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using DeleteListsCookie.Check.
|
|
func DeleteListsChecked(c *xgb.Conn, ContextTag ContextTag, List uint32, Range int32) DeleteListsCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DeleteLists' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(deleteListsRequest(c, ContextTag, List, Range), cookie)
|
|
return DeleteListsCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook DeleteListsCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// deleteListsRequest writes a DeleteLists request to a byte slice for transfer.
|
|
func deleteListsRequest(c *xgb.Conn, ContextTag ContextTag, List uint32, Range int32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 103 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], List)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Range))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// DeleteQueriesARBCookie is a cookie used only for DeleteQueriesARB requests.
|
|
type DeleteQueriesARBCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// DeleteQueriesARB sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func DeleteQueriesARB(c *xgb.Conn, ContextTag ContextTag, N int32, Ids []uint32) DeleteQueriesARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DeleteQueriesARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(deleteQueriesARBRequest(c, ContextTag, N, Ids), cookie)
|
|
return DeleteQueriesARBCookie{cookie}
|
|
}
|
|
|
|
// DeleteQueriesARBChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using DeleteQueriesARBCookie.Check.
|
|
func DeleteQueriesARBChecked(c *xgb.Conn, ContextTag ContextTag, N int32, Ids []uint32) DeleteQueriesARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DeleteQueriesARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(deleteQueriesARBRequest(c, ContextTag, N, Ids), cookie)
|
|
return DeleteQueriesARBCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook DeleteQueriesARBCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// deleteQueriesARBRequest writes a DeleteQueriesARB request to a byte slice for transfer.
|
|
func deleteQueriesARBRequest(c *xgb.Conn, ContextTag ContextTag, N int32, Ids []uint32) []byte {
|
|
size := xgb.Pad((12 + xgb.Pad((int(N) * 4))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 161 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(N))
|
|
b += 4
|
|
|
|
for i := 0; i < int(N); i++ {
|
|
xgb.Put32(buf[b:], Ids[i])
|
|
b += 4
|
|
}
|
|
|
|
return buf
|
|
}
|
|
|
|
// DeleteTexturesCookie is a cookie used only for DeleteTextures requests.
|
|
type DeleteTexturesCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// DeleteTextures sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func DeleteTextures(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) DeleteTexturesCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DeleteTextures' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(deleteTexturesRequest(c, ContextTag, N, Textures), cookie)
|
|
return DeleteTexturesCookie{cookie}
|
|
}
|
|
|
|
// DeleteTexturesChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using DeleteTexturesCookie.Check.
|
|
func DeleteTexturesChecked(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) DeleteTexturesCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DeleteTextures' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(deleteTexturesRequest(c, ContextTag, N, Textures), cookie)
|
|
return DeleteTexturesCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook DeleteTexturesCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// deleteTexturesRequest writes a DeleteTextures request to a byte slice for transfer.
|
|
func deleteTexturesRequest(c *xgb.Conn, ContextTag ContextTag, N int32, Textures []uint32) []byte {
|
|
size := xgb.Pad((12 + xgb.Pad((int(N) * 4))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 144 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(N))
|
|
b += 4
|
|
|
|
for i := 0; i < int(N); i++ {
|
|
xgb.Put32(buf[b:], Textures[i])
|
|
b += 4
|
|
}
|
|
|
|
return buf
|
|
}
|
|
|
|
// DeleteWindowCookie is a cookie used only for DeleteWindow requests.
|
|
type DeleteWindowCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// DeleteWindow sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func DeleteWindow(c *xgb.Conn, Glxwindow Window) DeleteWindowCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DeleteWindow' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(deleteWindowRequest(c, Glxwindow), cookie)
|
|
return DeleteWindowCookie{cookie}
|
|
}
|
|
|
|
// DeleteWindowChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using DeleteWindowCookie.Check.
|
|
func DeleteWindowChecked(c *xgb.Conn, Glxwindow Window) DeleteWindowCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DeleteWindow' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(deleteWindowRequest(c, Glxwindow), cookie)
|
|
return DeleteWindowCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook DeleteWindowCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// deleteWindowRequest writes a DeleteWindow request to a byte slice for transfer.
|
|
func deleteWindowRequest(c *xgb.Conn, Glxwindow Window) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 32 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Glxwindow))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// DestroyContextCookie is a cookie used only for DestroyContext requests.
|
|
type DestroyContextCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// DestroyContext sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func DestroyContext(c *xgb.Conn, Context Context) DestroyContextCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DestroyContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(destroyContextRequest(c, Context), cookie)
|
|
return DestroyContextCookie{cookie}
|
|
}
|
|
|
|
// DestroyContextChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using DestroyContextCookie.Check.
|
|
func DestroyContextChecked(c *xgb.Conn, Context Context) DestroyContextCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DestroyContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(destroyContextRequest(c, Context), cookie)
|
|
return DestroyContextCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook DestroyContextCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// destroyContextRequest writes a DestroyContext request to a byte slice for transfer.
|
|
func destroyContextRequest(c *xgb.Conn, Context Context) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 4 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Context))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// DestroyGLXPixmapCookie is a cookie used only for DestroyGLXPixmap requests.
|
|
type DestroyGLXPixmapCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// DestroyGLXPixmap sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func DestroyGLXPixmap(c *xgb.Conn, GlxPixmap Pixmap) DestroyGLXPixmapCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DestroyGLXPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(destroyGLXPixmapRequest(c, GlxPixmap), cookie)
|
|
return DestroyGLXPixmapCookie{cookie}
|
|
}
|
|
|
|
// DestroyGLXPixmapChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using DestroyGLXPixmapCookie.Check.
|
|
func DestroyGLXPixmapChecked(c *xgb.Conn, GlxPixmap Pixmap) DestroyGLXPixmapCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DestroyGLXPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(destroyGLXPixmapRequest(c, GlxPixmap), cookie)
|
|
return DestroyGLXPixmapCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook DestroyGLXPixmapCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// destroyGLXPixmapRequest writes a DestroyGLXPixmap request to a byte slice for transfer.
|
|
func destroyGLXPixmapRequest(c *xgb.Conn, GlxPixmap Pixmap) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 15 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(GlxPixmap))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// DestroyPbufferCookie is a cookie used only for DestroyPbuffer requests.
|
|
type DestroyPbufferCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// DestroyPbuffer sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func DestroyPbuffer(c *xgb.Conn, Pbuffer Pbuffer) DestroyPbufferCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DestroyPbuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(destroyPbufferRequest(c, Pbuffer), cookie)
|
|
return DestroyPbufferCookie{cookie}
|
|
}
|
|
|
|
// DestroyPbufferChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using DestroyPbufferCookie.Check.
|
|
func DestroyPbufferChecked(c *xgb.Conn, Pbuffer Pbuffer) DestroyPbufferCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DestroyPbuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(destroyPbufferRequest(c, Pbuffer), cookie)
|
|
return DestroyPbufferCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook DestroyPbufferCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// destroyPbufferRequest writes a DestroyPbuffer request to a byte slice for transfer.
|
|
func destroyPbufferRequest(c *xgb.Conn, Pbuffer Pbuffer) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 28 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Pbuffer))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// DestroyPixmapCookie is a cookie used only for DestroyPixmap requests.
|
|
type DestroyPixmapCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// DestroyPixmap sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func DestroyPixmap(c *xgb.Conn, GlxPixmap Pixmap) DestroyPixmapCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DestroyPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(destroyPixmapRequest(c, GlxPixmap), cookie)
|
|
return DestroyPixmapCookie{cookie}
|
|
}
|
|
|
|
// DestroyPixmapChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using DestroyPixmapCookie.Check.
|
|
func DestroyPixmapChecked(c *xgb.Conn, GlxPixmap Pixmap) DestroyPixmapCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'DestroyPixmap' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(destroyPixmapRequest(c, GlxPixmap), cookie)
|
|
return DestroyPixmapCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook DestroyPixmapCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// destroyPixmapRequest writes a DestroyPixmap request to a byte slice for transfer.
|
|
func destroyPixmapRequest(c *xgb.Conn, GlxPixmap Pixmap) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 23 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(GlxPixmap))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// EndListCookie is a cookie used only for EndList requests.
|
|
type EndListCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// EndList sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func EndList(c *xgb.Conn, ContextTag ContextTag) EndListCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'EndList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(endListRequest(c, ContextTag), cookie)
|
|
return EndListCookie{cookie}
|
|
}
|
|
|
|
// EndListChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using EndListCookie.Check.
|
|
func EndListChecked(c *xgb.Conn, ContextTag ContextTag) EndListCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'EndList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(endListRequest(c, ContextTag), cookie)
|
|
return EndListCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook EndListCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// endListRequest writes a EndList request to a byte slice for transfer.
|
|
func endListRequest(c *xgb.Conn, ContextTag ContextTag) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 102 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// FeedbackBufferCookie is a cookie used only for FeedbackBuffer requests.
|
|
type FeedbackBufferCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// FeedbackBuffer sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func FeedbackBuffer(c *xgb.Conn, ContextTag ContextTag, Size, Type int32) FeedbackBufferCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'FeedbackBuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(feedbackBufferRequest(c, ContextTag, Size, Type), cookie)
|
|
return FeedbackBufferCookie{cookie}
|
|
}
|
|
|
|
// FeedbackBufferChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using FeedbackBufferCookie.Check.
|
|
func FeedbackBufferChecked(c *xgb.Conn, ContextTag ContextTag, Size, Type int32) FeedbackBufferCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'FeedbackBuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(feedbackBufferRequest(c, ContextTag, Size, Type), cookie)
|
|
return FeedbackBufferCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook FeedbackBufferCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// feedbackBufferRequest writes a FeedbackBuffer request to a byte slice for transfer.
|
|
func feedbackBufferRequest(c *xgb.Conn, ContextTag ContextTag, Size, Type int32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 105 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Size))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Type))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// FinishCookie is a cookie used only for Finish requests.
|
|
type FinishCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// Finish sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling FinishCookie.Reply.
|
|
func Finish(c *xgb.Conn, ContextTag ContextTag) FinishCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'Finish' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(finishRequest(c, ContextTag), cookie)
|
|
return FinishCookie{cookie}
|
|
}
|
|
|
|
// FinishUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func FinishUnchecked(c *xgb.Conn, ContextTag ContextTag) FinishCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'Finish' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(finishRequest(c, ContextTag), cookie)
|
|
return FinishCookie{cookie}
|
|
}
|
|
|
|
// FinishReply represents the data returned from a Finish request.
|
|
type FinishReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a Finish request.
|
|
func (cook FinishCookie) Reply() (*FinishReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return finishReply(buf), nil
|
|
}
|
|
|
|
// finishReply reads a byte slice into a FinishReply value.
|
|
func finishReply(buf []byte) *FinishReply {
|
|
v := new(FinishReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
return v
|
|
}
|
|
|
|
// finishRequest writes a Finish request to a byte slice for transfer.
|
|
func finishRequest(c *xgb.Conn, ContextTag ContextTag) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 108 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// FlushCookie is a cookie used only for Flush requests.
|
|
type FlushCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// Flush sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func Flush(c *xgb.Conn, ContextTag ContextTag) FlushCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'Flush' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(flushRequest(c, ContextTag), cookie)
|
|
return FlushCookie{cookie}
|
|
}
|
|
|
|
// FlushChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using FlushCookie.Check.
|
|
func FlushChecked(c *xgb.Conn, ContextTag ContextTag) FlushCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'Flush' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(flushRequest(c, ContextTag), cookie)
|
|
return FlushCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook FlushCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// flushRequest writes a Flush request to a byte slice for transfer.
|
|
func flushRequest(c *xgb.Conn, ContextTag ContextTag) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 142 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GenListsCookie is a cookie used only for GenLists requests.
|
|
type GenListsCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GenLists sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GenListsCookie.Reply.
|
|
func GenLists(c *xgb.Conn, ContextTag ContextTag, Range int32) GenListsCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GenLists' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(genListsRequest(c, ContextTag, Range), cookie)
|
|
return GenListsCookie{cookie}
|
|
}
|
|
|
|
// GenListsUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GenListsUnchecked(c *xgb.Conn, ContextTag ContextTag, Range int32) GenListsCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GenLists' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(genListsRequest(c, ContextTag, Range), cookie)
|
|
return GenListsCookie{cookie}
|
|
}
|
|
|
|
// GenListsReply represents the data returned from a GenLists request.
|
|
type GenListsReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
RetVal uint32
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GenLists request.
|
|
func (cook GenListsCookie) Reply() (*GenListsReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return genListsReply(buf), nil
|
|
}
|
|
|
|
// genListsReply reads a byte slice into a GenListsReply value.
|
|
func genListsReply(buf []byte) *GenListsReply {
|
|
v := new(GenListsReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.RetVal = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
return v
|
|
}
|
|
|
|
// genListsRequest writes a GenLists request to a byte slice for transfer.
|
|
func genListsRequest(c *xgb.Conn, ContextTag ContextTag, Range int32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 104 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Range))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GenQueriesARBCookie is a cookie used only for GenQueriesARB requests.
|
|
type GenQueriesARBCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GenQueriesARB sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GenQueriesARBCookie.Reply.
|
|
func GenQueriesARB(c *xgb.Conn, ContextTag ContextTag, N int32) GenQueriesARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GenQueriesARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(genQueriesARBRequest(c, ContextTag, N), cookie)
|
|
return GenQueriesARBCookie{cookie}
|
|
}
|
|
|
|
// GenQueriesARBUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GenQueriesARBUnchecked(c *xgb.Conn, ContextTag ContextTag, N int32) GenQueriesARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GenQueriesARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(genQueriesARBRequest(c, ContextTag, N), cookie)
|
|
return GenQueriesARBCookie{cookie}
|
|
}
|
|
|
|
// GenQueriesARBReply represents the data returned from a GenQueriesARB request.
|
|
type GenQueriesARBReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 24 bytes
|
|
Data []uint32 // size: xgb.Pad((int(Length) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GenQueriesARB request.
|
|
func (cook GenQueriesARBCookie) Reply() (*GenQueriesARBReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return genQueriesARBReply(buf), nil
|
|
}
|
|
|
|
// genQueriesARBReply reads a byte slice into a GenQueriesARBReply value.
|
|
func genQueriesARBReply(buf []byte) *GenQueriesARBReply {
|
|
v := new(GenQueriesARBReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 24 // padding
|
|
|
|
v.Data = make([]uint32, v.Length)
|
|
for i := 0; i < int(v.Length); i++ {
|
|
v.Data[i] = xgb.Get32(buf[b:])
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// genQueriesARBRequest writes a GenQueriesARB request to a byte slice for transfer.
|
|
func genQueriesARBRequest(c *xgb.Conn, ContextTag ContextTag, N int32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 162 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(N))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GenTexturesCookie is a cookie used only for GenTextures requests.
|
|
type GenTexturesCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GenTextures sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GenTexturesCookie.Reply.
|
|
func GenTextures(c *xgb.Conn, ContextTag ContextTag, N int32) GenTexturesCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GenTextures' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(genTexturesRequest(c, ContextTag, N), cookie)
|
|
return GenTexturesCookie{cookie}
|
|
}
|
|
|
|
// GenTexturesUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GenTexturesUnchecked(c *xgb.Conn, ContextTag ContextTag, N int32) GenTexturesCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GenTextures' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(genTexturesRequest(c, ContextTag, N), cookie)
|
|
return GenTexturesCookie{cookie}
|
|
}
|
|
|
|
// GenTexturesReply represents the data returned from a GenTextures request.
|
|
type GenTexturesReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 24 bytes
|
|
Data []uint32 // size: xgb.Pad((int(Length) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GenTextures request.
|
|
func (cook GenTexturesCookie) Reply() (*GenTexturesReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return genTexturesReply(buf), nil
|
|
}
|
|
|
|
// genTexturesReply reads a byte slice into a GenTexturesReply value.
|
|
func genTexturesReply(buf []byte) *GenTexturesReply {
|
|
v := new(GenTexturesReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 24 // padding
|
|
|
|
v.Data = make([]uint32, v.Length)
|
|
for i := 0; i < int(v.Length); i++ {
|
|
v.Data[i] = xgb.Get32(buf[b:])
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// genTexturesRequest writes a GenTextures request to a byte slice for transfer.
|
|
func genTexturesRequest(c *xgb.Conn, ContextTag ContextTag, N int32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 145 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(N))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetBooleanvCookie is a cookie used only for GetBooleanv requests.
|
|
type GetBooleanvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetBooleanv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetBooleanvCookie.Reply.
|
|
func GetBooleanv(c *xgb.Conn, ContextTag ContextTag, Pname int32) GetBooleanvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetBooleanv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getBooleanvRequest(c, ContextTag, Pname), cookie)
|
|
return GetBooleanvCookie{cookie}
|
|
}
|
|
|
|
// GetBooleanvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetBooleanvUnchecked(c *xgb.Conn, ContextTag ContextTag, Pname int32) GetBooleanvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetBooleanv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getBooleanvRequest(c, ContextTag, Pname), cookie)
|
|
return GetBooleanvCookie{cookie}
|
|
}
|
|
|
|
// GetBooleanvReply represents the data returned from a GetBooleanv request.
|
|
type GetBooleanvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum bool
|
|
// padding: 15 bytes
|
|
Data []bool // size: xgb.Pad((int(N) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetBooleanv request.
|
|
func (cook GetBooleanvCookie) Reply() (*GetBooleanvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getBooleanvReply(buf), nil
|
|
}
|
|
|
|
// getBooleanvReply reads a byte slice into a GetBooleanvReply value.
|
|
func getBooleanvReply(buf []byte) *GetBooleanvReply {
|
|
v := new(GetBooleanvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
if buf[b] == 1 {
|
|
v.Datum = true
|
|
} else {
|
|
v.Datum = false
|
|
}
|
|
b += 1
|
|
|
|
b += 15 // padding
|
|
|
|
v.Data = make([]bool, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
if buf[b] == 1 {
|
|
v.Data[i] = true
|
|
} else {
|
|
v.Data[i] = false
|
|
}
|
|
b += 1
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getBooleanvRequest writes a GetBooleanv request to a byte slice for transfer.
|
|
func getBooleanvRequest(c *xgb.Conn, ContextTag ContextTag, Pname int32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 112 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Pname))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetClipPlaneCookie is a cookie used only for GetClipPlane requests.
|
|
type GetClipPlaneCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetClipPlane sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetClipPlaneCookie.Reply.
|
|
func GetClipPlane(c *xgb.Conn, ContextTag ContextTag, Plane int32) GetClipPlaneCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetClipPlane' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getClipPlaneRequest(c, ContextTag, Plane), cookie)
|
|
return GetClipPlaneCookie{cookie}
|
|
}
|
|
|
|
// GetClipPlaneUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetClipPlaneUnchecked(c *xgb.Conn, ContextTag ContextTag, Plane int32) GetClipPlaneCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetClipPlane' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getClipPlaneRequest(c, ContextTag, Plane), cookie)
|
|
return GetClipPlaneCookie{cookie}
|
|
}
|
|
|
|
// GetClipPlaneReply represents the data returned from a GetClipPlane request.
|
|
type GetClipPlaneReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 24 bytes
|
|
Data []Float64 // size: xgb.Pad(((int(Length) / 2) * 8))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetClipPlane request.
|
|
func (cook GetClipPlaneCookie) Reply() (*GetClipPlaneReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getClipPlaneReply(buf), nil
|
|
}
|
|
|
|
// getClipPlaneReply reads a byte slice into a GetClipPlaneReply value.
|
|
func getClipPlaneReply(buf []byte) *GetClipPlaneReply {
|
|
v := new(GetClipPlaneReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 1 // padding
|
|
|
|
b += 24 // padding
|
|
|
|
v.Data = make([]Float64, (int(v.Length) / 2))
|
|
for i := 0; i < int((int(v.Length) / 2)); i++ {
|
|
v.Data[i] = Float64(xgb.Get64(buf[b:]))
|
|
b += 8
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getClipPlaneRequest writes a GetClipPlane request to a byte slice for transfer.
|
|
func getClipPlaneRequest(c *xgb.Conn, ContextTag ContextTag, Plane int32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 113 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Plane))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetColorTableCookie is a cookie used only for GetColorTable requests.
|
|
type GetColorTableCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetColorTable sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetColorTableCookie.Reply.
|
|
func GetColorTable(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes bool) GetColorTableCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetColorTable' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getColorTableRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie)
|
|
return GetColorTableCookie{cookie}
|
|
}
|
|
|
|
// GetColorTableUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetColorTableUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes bool) GetColorTableCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetColorTable' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getColorTableRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie)
|
|
return GetColorTableCookie{cookie}
|
|
}
|
|
|
|
// GetColorTableReply represents the data returned from a GetColorTable request.
|
|
type GetColorTableReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 8 bytes
|
|
Width int32
|
|
// padding: 12 bytes
|
|
Data []byte // size: xgb.Pad(((int(Length) * 4) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetColorTable request.
|
|
func (cook GetColorTableCookie) Reply() (*GetColorTableReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getColorTableReply(buf), nil
|
|
}
|
|
|
|
// getColorTableReply reads a byte slice into a GetColorTableReply value.
|
|
func getColorTableReply(buf []byte) *GetColorTableReply {
|
|
v := new(GetColorTableReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 8 // padding
|
|
|
|
v.Width = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]byte, (int(v.Length) * 4))
|
|
copy(v.Data[:(int(v.Length)*4)], buf[b:])
|
|
b += int((int(v.Length) * 4))
|
|
|
|
return v
|
|
}
|
|
|
|
// getColorTableRequest writes a GetColorTable request to a byte slice for transfer.
|
|
func getColorTableRequest(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes bool) []byte {
|
|
size := 24
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 147 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Format)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Type)
|
|
b += 4
|
|
|
|
if SwapBytes {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetColorTableParameterfvCookie is a cookie used only for GetColorTableParameterfv requests.
|
|
type GetColorTableParameterfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetColorTableParameterfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetColorTableParameterfvCookie.Reply.
|
|
func GetColorTableParameterfv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetColorTableParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetColorTableParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getColorTableParameterfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetColorTableParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetColorTableParameterfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetColorTableParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetColorTableParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetColorTableParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getColorTableParameterfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetColorTableParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetColorTableParameterfvReply represents the data returned from a GetColorTableParameterfv request.
|
|
type GetColorTableParameterfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetColorTableParameterfv request.
|
|
func (cook GetColorTableParameterfvCookie) Reply() (*GetColorTableParameterfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getColorTableParameterfvReply(buf), nil
|
|
}
|
|
|
|
// getColorTableParameterfvReply reads a byte slice into a GetColorTableParameterfvReply value.
|
|
func getColorTableParameterfvReply(buf []byte) *GetColorTableParameterfvReply {
|
|
v := new(GetColorTableParameterfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getColorTableParameterfvRequest writes a GetColorTableParameterfv request to a byte slice for transfer.
|
|
func getColorTableParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 148 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetColorTableParameterivCookie is a cookie used only for GetColorTableParameteriv requests.
|
|
type GetColorTableParameterivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetColorTableParameteriv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetColorTableParameterivCookie.Reply.
|
|
func GetColorTableParameteriv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetColorTableParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetColorTableParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getColorTableParameterivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetColorTableParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetColorTableParameterivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetColorTableParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetColorTableParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetColorTableParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getColorTableParameterivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetColorTableParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetColorTableParameterivReply represents the data returned from a GetColorTableParameteriv request.
|
|
type GetColorTableParameterivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetColorTableParameteriv request.
|
|
func (cook GetColorTableParameterivCookie) Reply() (*GetColorTableParameterivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getColorTableParameterivReply(buf), nil
|
|
}
|
|
|
|
// getColorTableParameterivReply reads a byte slice into a GetColorTableParameterivReply value.
|
|
func getColorTableParameterivReply(buf []byte) *GetColorTableParameterivReply {
|
|
v := new(GetColorTableParameterivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getColorTableParameterivRequest writes a GetColorTableParameteriv request to a byte slice for transfer.
|
|
func getColorTableParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 149 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetCompressedTexImageARBCookie is a cookie used only for GetCompressedTexImageARB requests.
|
|
type GetCompressedTexImageARBCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetCompressedTexImageARB sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetCompressedTexImageARBCookie.Reply.
|
|
func GetCompressedTexImageARB(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32) GetCompressedTexImageARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetCompressedTexImageARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getCompressedTexImageARBRequest(c, ContextTag, Target, Level), cookie)
|
|
return GetCompressedTexImageARBCookie{cookie}
|
|
}
|
|
|
|
// GetCompressedTexImageARBUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetCompressedTexImageARBUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32) GetCompressedTexImageARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetCompressedTexImageARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getCompressedTexImageARBRequest(c, ContextTag, Target, Level), cookie)
|
|
return GetCompressedTexImageARBCookie{cookie}
|
|
}
|
|
|
|
// GetCompressedTexImageARBReply represents the data returned from a GetCompressedTexImageARB request.
|
|
type GetCompressedTexImageARBReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 8 bytes
|
|
Size int32
|
|
// padding: 12 bytes
|
|
Data []byte // size: xgb.Pad(((int(Length) * 4) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetCompressedTexImageARB request.
|
|
func (cook GetCompressedTexImageARBCookie) Reply() (*GetCompressedTexImageARBReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getCompressedTexImageARBReply(buf), nil
|
|
}
|
|
|
|
// getCompressedTexImageARBReply reads a byte slice into a GetCompressedTexImageARBReply value.
|
|
func getCompressedTexImageARBReply(buf []byte) *GetCompressedTexImageARBReply {
|
|
v := new(GetCompressedTexImageARBReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 8 // padding
|
|
|
|
v.Size = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]byte, (int(v.Length) * 4))
|
|
copy(v.Data[:(int(v.Length)*4)], buf[b:])
|
|
b += int((int(v.Length) * 4))
|
|
|
|
return v
|
|
}
|
|
|
|
// getCompressedTexImageARBRequest writes a GetCompressedTexImageARB request to a byte slice for transfer.
|
|
func getCompressedTexImageARBRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 160 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Level))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetConvolutionFilterCookie is a cookie used only for GetConvolutionFilter requests.
|
|
type GetConvolutionFilterCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetConvolutionFilter sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetConvolutionFilterCookie.Reply.
|
|
func GetConvolutionFilter(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes bool) GetConvolutionFilterCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetConvolutionFilter' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getConvolutionFilterRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie)
|
|
return GetConvolutionFilterCookie{cookie}
|
|
}
|
|
|
|
// GetConvolutionFilterUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetConvolutionFilterUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes bool) GetConvolutionFilterCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetConvolutionFilter' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getConvolutionFilterRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie)
|
|
return GetConvolutionFilterCookie{cookie}
|
|
}
|
|
|
|
// GetConvolutionFilterReply represents the data returned from a GetConvolutionFilter request.
|
|
type GetConvolutionFilterReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 8 bytes
|
|
Width int32
|
|
Height int32
|
|
// padding: 8 bytes
|
|
Data []byte // size: xgb.Pad(((int(Length) * 4) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetConvolutionFilter request.
|
|
func (cook GetConvolutionFilterCookie) Reply() (*GetConvolutionFilterReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getConvolutionFilterReply(buf), nil
|
|
}
|
|
|
|
// getConvolutionFilterReply reads a byte slice into a GetConvolutionFilterReply value.
|
|
func getConvolutionFilterReply(buf []byte) *GetConvolutionFilterReply {
|
|
v := new(GetConvolutionFilterReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 8 // padding
|
|
|
|
v.Width = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
v.Height = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 8 // padding
|
|
|
|
v.Data = make([]byte, (int(v.Length) * 4))
|
|
copy(v.Data[:(int(v.Length)*4)], buf[b:])
|
|
b += int((int(v.Length) * 4))
|
|
|
|
return v
|
|
}
|
|
|
|
// getConvolutionFilterRequest writes a GetConvolutionFilter request to a byte slice for transfer.
|
|
func getConvolutionFilterRequest(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes bool) []byte {
|
|
size := 24
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 150 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Format)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Type)
|
|
b += 4
|
|
|
|
if SwapBytes {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetConvolutionParameterfvCookie is a cookie used only for GetConvolutionParameterfv requests.
|
|
type GetConvolutionParameterfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetConvolutionParameterfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetConvolutionParameterfvCookie.Reply.
|
|
func GetConvolutionParameterfv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetConvolutionParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetConvolutionParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getConvolutionParameterfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetConvolutionParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetConvolutionParameterfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetConvolutionParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetConvolutionParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetConvolutionParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getConvolutionParameterfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetConvolutionParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetConvolutionParameterfvReply represents the data returned from a GetConvolutionParameterfv request.
|
|
type GetConvolutionParameterfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetConvolutionParameterfv request.
|
|
func (cook GetConvolutionParameterfvCookie) Reply() (*GetConvolutionParameterfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getConvolutionParameterfvReply(buf), nil
|
|
}
|
|
|
|
// getConvolutionParameterfvReply reads a byte slice into a GetConvolutionParameterfvReply value.
|
|
func getConvolutionParameterfvReply(buf []byte) *GetConvolutionParameterfvReply {
|
|
v := new(GetConvolutionParameterfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getConvolutionParameterfvRequest writes a GetConvolutionParameterfv request to a byte slice for transfer.
|
|
func getConvolutionParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 151 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetConvolutionParameterivCookie is a cookie used only for GetConvolutionParameteriv requests.
|
|
type GetConvolutionParameterivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetConvolutionParameteriv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetConvolutionParameterivCookie.Reply.
|
|
func GetConvolutionParameteriv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetConvolutionParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetConvolutionParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getConvolutionParameterivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetConvolutionParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetConvolutionParameterivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetConvolutionParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetConvolutionParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetConvolutionParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getConvolutionParameterivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetConvolutionParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetConvolutionParameterivReply represents the data returned from a GetConvolutionParameteriv request.
|
|
type GetConvolutionParameterivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetConvolutionParameteriv request.
|
|
func (cook GetConvolutionParameterivCookie) Reply() (*GetConvolutionParameterivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getConvolutionParameterivReply(buf), nil
|
|
}
|
|
|
|
// getConvolutionParameterivReply reads a byte slice into a GetConvolutionParameterivReply value.
|
|
func getConvolutionParameterivReply(buf []byte) *GetConvolutionParameterivReply {
|
|
v := new(GetConvolutionParameterivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getConvolutionParameterivRequest writes a GetConvolutionParameteriv request to a byte slice for transfer.
|
|
func getConvolutionParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 152 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetDoublevCookie is a cookie used only for GetDoublev requests.
|
|
type GetDoublevCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetDoublev sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetDoublevCookie.Reply.
|
|
func GetDoublev(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetDoublevCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetDoublev' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getDoublevRequest(c, ContextTag, Pname), cookie)
|
|
return GetDoublevCookie{cookie}
|
|
}
|
|
|
|
// GetDoublevUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetDoublevUnchecked(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetDoublevCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetDoublev' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getDoublevRequest(c, ContextTag, Pname), cookie)
|
|
return GetDoublevCookie{cookie}
|
|
}
|
|
|
|
// GetDoublevReply represents the data returned from a GetDoublev request.
|
|
type GetDoublevReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float64
|
|
// padding: 8 bytes
|
|
Data []Float64 // size: xgb.Pad((int(N) * 8))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetDoublev request.
|
|
func (cook GetDoublevCookie) Reply() (*GetDoublevReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getDoublevReply(buf), nil
|
|
}
|
|
|
|
// getDoublevReply reads a byte slice into a GetDoublevReply value.
|
|
func getDoublevReply(buf []byte) *GetDoublevReply {
|
|
v := new(GetDoublevReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 1 // padding
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float64(xgb.Get64(buf[b:]))
|
|
b += 8
|
|
|
|
b += 8 // padding
|
|
|
|
v.Data = make([]Float64, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float64(xgb.Get64(buf[b:]))
|
|
b += 8
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getDoublevRequest writes a GetDoublev request to a byte slice for transfer.
|
|
func getDoublevRequest(c *xgb.Conn, ContextTag ContextTag, Pname uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 114 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetDrawableAttributesCookie is a cookie used only for GetDrawableAttributes requests.
|
|
type GetDrawableAttributesCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetDrawableAttributes sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetDrawableAttributesCookie.Reply.
|
|
func GetDrawableAttributes(c *xgb.Conn, Drawable Drawable) GetDrawableAttributesCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetDrawableAttributes' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getDrawableAttributesRequest(c, Drawable), cookie)
|
|
return GetDrawableAttributesCookie{cookie}
|
|
}
|
|
|
|
// GetDrawableAttributesUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetDrawableAttributesUnchecked(c *xgb.Conn, Drawable Drawable) GetDrawableAttributesCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetDrawableAttributes' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getDrawableAttributesRequest(c, Drawable), cookie)
|
|
return GetDrawableAttributesCookie{cookie}
|
|
}
|
|
|
|
// GetDrawableAttributesReply represents the data returned from a GetDrawableAttributes request.
|
|
type GetDrawableAttributesReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
NumAttribs uint32
|
|
// padding: 20 bytes
|
|
Attribs []uint32 // size: xgb.Pad(((int(NumAttribs) * 2) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetDrawableAttributes request.
|
|
func (cook GetDrawableAttributesCookie) Reply() (*GetDrawableAttributesReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getDrawableAttributesReply(buf), nil
|
|
}
|
|
|
|
// getDrawableAttributesReply reads a byte slice into a GetDrawableAttributesReply value.
|
|
func getDrawableAttributesReply(buf []byte) *GetDrawableAttributesReply {
|
|
v := new(GetDrawableAttributesReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.NumAttribs = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 20 // padding
|
|
|
|
v.Attribs = make([]uint32, (int(v.NumAttribs) * 2))
|
|
for i := 0; i < int((int(v.NumAttribs) * 2)); i++ {
|
|
v.Attribs[i] = xgb.Get32(buf[b:])
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getDrawableAttributesRequest writes a GetDrawableAttributes request to a byte slice for transfer.
|
|
func getDrawableAttributesRequest(c *xgb.Conn, Drawable Drawable) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 29 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Drawable))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetErrorCookie is a cookie used only for GetError requests.
|
|
type GetErrorCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetError sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetErrorCookie.Reply.
|
|
func GetError(c *xgb.Conn, ContextTag ContextTag) GetErrorCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetError' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getErrorRequest(c, ContextTag), cookie)
|
|
return GetErrorCookie{cookie}
|
|
}
|
|
|
|
// GetErrorUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetErrorUnchecked(c *xgb.Conn, ContextTag ContextTag) GetErrorCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetError' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getErrorRequest(c, ContextTag), cookie)
|
|
return GetErrorCookie{cookie}
|
|
}
|
|
|
|
// GetErrorReply represents the data returned from a GetError request.
|
|
type GetErrorReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
Error int32
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetError request.
|
|
func (cook GetErrorCookie) Reply() (*GetErrorReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getErrorReply(buf), nil
|
|
}
|
|
|
|
// getErrorReply reads a byte slice into a GetErrorReply value.
|
|
func getErrorReply(buf []byte) *GetErrorReply {
|
|
v := new(GetErrorReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.Error = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
return v
|
|
}
|
|
|
|
// getErrorRequest writes a GetError request to a byte slice for transfer.
|
|
func getErrorRequest(c *xgb.Conn, ContextTag ContextTag) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 115 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetFBConfigsCookie is a cookie used only for GetFBConfigs requests.
|
|
type GetFBConfigsCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetFBConfigs sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetFBConfigsCookie.Reply.
|
|
func GetFBConfigs(c *xgb.Conn, Screen uint32) GetFBConfigsCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetFBConfigs' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getFBConfigsRequest(c, Screen), cookie)
|
|
return GetFBConfigsCookie{cookie}
|
|
}
|
|
|
|
// GetFBConfigsUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetFBConfigsUnchecked(c *xgb.Conn, Screen uint32) GetFBConfigsCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetFBConfigs' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getFBConfigsRequest(c, Screen), cookie)
|
|
return GetFBConfigsCookie{cookie}
|
|
}
|
|
|
|
// GetFBConfigsReply represents the data returned from a GetFBConfigs request.
|
|
type GetFBConfigsReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
NumFbConfigs uint32
|
|
NumProperties uint32
|
|
// padding: 16 bytes
|
|
PropertyList []uint32 // size: xgb.Pad((int(Length) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetFBConfigs request.
|
|
func (cook GetFBConfigsCookie) Reply() (*GetFBConfigsReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getFBConfigsReply(buf), nil
|
|
}
|
|
|
|
// getFBConfigsReply reads a byte slice into a GetFBConfigsReply value.
|
|
func getFBConfigsReply(buf []byte) *GetFBConfigsReply {
|
|
v := new(GetFBConfigsReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.NumFbConfigs = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.NumProperties = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 16 // padding
|
|
|
|
v.PropertyList = make([]uint32, v.Length)
|
|
for i := 0; i < int(v.Length); i++ {
|
|
v.PropertyList[i] = xgb.Get32(buf[b:])
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getFBConfigsRequest writes a GetFBConfigs request to a byte slice for transfer.
|
|
func getFBConfigsRequest(c *xgb.Conn, Screen uint32) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 21 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], Screen)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetFloatvCookie is a cookie used only for GetFloatv requests.
|
|
type GetFloatvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetFloatv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetFloatvCookie.Reply.
|
|
func GetFloatv(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetFloatvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetFloatv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getFloatvRequest(c, ContextTag, Pname), cookie)
|
|
return GetFloatvCookie{cookie}
|
|
}
|
|
|
|
// GetFloatvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetFloatvUnchecked(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetFloatvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetFloatv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getFloatvRequest(c, ContextTag, Pname), cookie)
|
|
return GetFloatvCookie{cookie}
|
|
}
|
|
|
|
// GetFloatvReply represents the data returned from a GetFloatv request.
|
|
type GetFloatvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetFloatv request.
|
|
func (cook GetFloatvCookie) Reply() (*GetFloatvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getFloatvReply(buf), nil
|
|
}
|
|
|
|
// getFloatvReply reads a byte slice into a GetFloatvReply value.
|
|
func getFloatvReply(buf []byte) *GetFloatvReply {
|
|
v := new(GetFloatvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getFloatvRequest writes a GetFloatv request to a byte slice for transfer.
|
|
func getFloatvRequest(c *xgb.Conn, ContextTag ContextTag, Pname uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 116 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetHistogramCookie is a cookie used only for GetHistogram requests.
|
|
type GetHistogramCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetHistogram sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetHistogramCookie.Reply.
|
|
func GetHistogram(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes, Reset bool) GetHistogramCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetHistogram' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getHistogramRequest(c, ContextTag, Target, Format, Type, SwapBytes, Reset), cookie)
|
|
return GetHistogramCookie{cookie}
|
|
}
|
|
|
|
// GetHistogramUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetHistogramUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes, Reset bool) GetHistogramCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetHistogram' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getHistogramRequest(c, ContextTag, Target, Format, Type, SwapBytes, Reset), cookie)
|
|
return GetHistogramCookie{cookie}
|
|
}
|
|
|
|
// GetHistogramReply represents the data returned from a GetHistogram request.
|
|
type GetHistogramReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 8 bytes
|
|
Width int32
|
|
// padding: 12 bytes
|
|
Data []byte // size: xgb.Pad(((int(Length) * 4) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetHistogram request.
|
|
func (cook GetHistogramCookie) Reply() (*GetHistogramReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getHistogramReply(buf), nil
|
|
}
|
|
|
|
// getHistogramReply reads a byte slice into a GetHistogramReply value.
|
|
func getHistogramReply(buf []byte) *GetHistogramReply {
|
|
v := new(GetHistogramReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 8 // padding
|
|
|
|
v.Width = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]byte, (int(v.Length) * 4))
|
|
copy(v.Data[:(int(v.Length)*4)], buf[b:])
|
|
b += int((int(v.Length) * 4))
|
|
|
|
return v
|
|
}
|
|
|
|
// getHistogramRequest writes a GetHistogram request to a byte slice for transfer.
|
|
func getHistogramRequest(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes, Reset bool) []byte {
|
|
size := 24
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 154 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Format)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Type)
|
|
b += 4
|
|
|
|
if SwapBytes {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
if Reset {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetHistogramParameterfvCookie is a cookie used only for GetHistogramParameterfv requests.
|
|
type GetHistogramParameterfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetHistogramParameterfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetHistogramParameterfvCookie.Reply.
|
|
func GetHistogramParameterfv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetHistogramParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetHistogramParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getHistogramParameterfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetHistogramParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetHistogramParameterfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetHistogramParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetHistogramParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetHistogramParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getHistogramParameterfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetHistogramParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetHistogramParameterfvReply represents the data returned from a GetHistogramParameterfv request.
|
|
type GetHistogramParameterfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetHistogramParameterfv request.
|
|
func (cook GetHistogramParameterfvCookie) Reply() (*GetHistogramParameterfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getHistogramParameterfvReply(buf), nil
|
|
}
|
|
|
|
// getHistogramParameterfvReply reads a byte slice into a GetHistogramParameterfvReply value.
|
|
func getHistogramParameterfvReply(buf []byte) *GetHistogramParameterfvReply {
|
|
v := new(GetHistogramParameterfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getHistogramParameterfvRequest writes a GetHistogramParameterfv request to a byte slice for transfer.
|
|
func getHistogramParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 155 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetHistogramParameterivCookie is a cookie used only for GetHistogramParameteriv requests.
|
|
type GetHistogramParameterivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetHistogramParameteriv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetHistogramParameterivCookie.Reply.
|
|
func GetHistogramParameteriv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetHistogramParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetHistogramParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getHistogramParameterivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetHistogramParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetHistogramParameterivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetHistogramParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetHistogramParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetHistogramParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getHistogramParameterivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetHistogramParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetHistogramParameterivReply represents the data returned from a GetHistogramParameteriv request.
|
|
type GetHistogramParameterivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetHistogramParameteriv request.
|
|
func (cook GetHistogramParameterivCookie) Reply() (*GetHistogramParameterivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getHistogramParameterivReply(buf), nil
|
|
}
|
|
|
|
// getHistogramParameterivReply reads a byte slice into a GetHistogramParameterivReply value.
|
|
func getHistogramParameterivReply(buf []byte) *GetHistogramParameterivReply {
|
|
v := new(GetHistogramParameterivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getHistogramParameterivRequest writes a GetHistogramParameteriv request to a byte slice for transfer.
|
|
func getHistogramParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 156 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetIntegervCookie is a cookie used only for GetIntegerv requests.
|
|
type GetIntegervCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetIntegerv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetIntegervCookie.Reply.
|
|
func GetIntegerv(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetIntegervCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetIntegerv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getIntegervRequest(c, ContextTag, Pname), cookie)
|
|
return GetIntegervCookie{cookie}
|
|
}
|
|
|
|
// GetIntegervUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetIntegervUnchecked(c *xgb.Conn, ContextTag ContextTag, Pname uint32) GetIntegervCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetIntegerv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getIntegervRequest(c, ContextTag, Pname), cookie)
|
|
return GetIntegervCookie{cookie}
|
|
}
|
|
|
|
// GetIntegervReply represents the data returned from a GetIntegerv request.
|
|
type GetIntegervReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetIntegerv request.
|
|
func (cook GetIntegervCookie) Reply() (*GetIntegervReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getIntegervReply(buf), nil
|
|
}
|
|
|
|
// getIntegervReply reads a byte slice into a GetIntegervReply value.
|
|
func getIntegervReply(buf []byte) *GetIntegervReply {
|
|
v := new(GetIntegervReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getIntegervRequest writes a GetIntegerv request to a byte slice for transfer.
|
|
func getIntegervRequest(c *xgb.Conn, ContextTag ContextTag, Pname uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 117 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetLightfvCookie is a cookie used only for GetLightfv requests.
|
|
type GetLightfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetLightfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetLightfvCookie.Reply.
|
|
func GetLightfv(c *xgb.Conn, ContextTag ContextTag, Light, Pname uint32) GetLightfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetLightfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getLightfvRequest(c, ContextTag, Light, Pname), cookie)
|
|
return GetLightfvCookie{cookie}
|
|
}
|
|
|
|
// GetLightfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetLightfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Light, Pname uint32) GetLightfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetLightfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getLightfvRequest(c, ContextTag, Light, Pname), cookie)
|
|
return GetLightfvCookie{cookie}
|
|
}
|
|
|
|
// GetLightfvReply represents the data returned from a GetLightfv request.
|
|
type GetLightfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetLightfv request.
|
|
func (cook GetLightfvCookie) Reply() (*GetLightfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getLightfvReply(buf), nil
|
|
}
|
|
|
|
// getLightfvReply reads a byte slice into a GetLightfvReply value.
|
|
func getLightfvReply(buf []byte) *GetLightfvReply {
|
|
v := new(GetLightfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getLightfvRequest writes a GetLightfv request to a byte slice for transfer.
|
|
func getLightfvRequest(c *xgb.Conn, ContextTag ContextTag, Light, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 118 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Light)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetLightivCookie is a cookie used only for GetLightiv requests.
|
|
type GetLightivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetLightiv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetLightivCookie.Reply.
|
|
func GetLightiv(c *xgb.Conn, ContextTag ContextTag, Light, Pname uint32) GetLightivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetLightiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getLightivRequest(c, ContextTag, Light, Pname), cookie)
|
|
return GetLightivCookie{cookie}
|
|
}
|
|
|
|
// GetLightivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetLightivUnchecked(c *xgb.Conn, ContextTag ContextTag, Light, Pname uint32) GetLightivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetLightiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getLightivRequest(c, ContextTag, Light, Pname), cookie)
|
|
return GetLightivCookie{cookie}
|
|
}
|
|
|
|
// GetLightivReply represents the data returned from a GetLightiv request.
|
|
type GetLightivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetLightiv request.
|
|
func (cook GetLightivCookie) Reply() (*GetLightivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getLightivReply(buf), nil
|
|
}
|
|
|
|
// getLightivReply reads a byte slice into a GetLightivReply value.
|
|
func getLightivReply(buf []byte) *GetLightivReply {
|
|
v := new(GetLightivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getLightivRequest writes a GetLightiv request to a byte slice for transfer.
|
|
func getLightivRequest(c *xgb.Conn, ContextTag ContextTag, Light, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 119 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Light)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetMapdvCookie is a cookie used only for GetMapdv requests.
|
|
type GetMapdvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetMapdv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetMapdvCookie.Reply.
|
|
func GetMapdv(c *xgb.Conn, ContextTag ContextTag, Target, Query uint32) GetMapdvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMapdv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getMapdvRequest(c, ContextTag, Target, Query), cookie)
|
|
return GetMapdvCookie{cookie}
|
|
}
|
|
|
|
// GetMapdvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetMapdvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Query uint32) GetMapdvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMapdv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getMapdvRequest(c, ContextTag, Target, Query), cookie)
|
|
return GetMapdvCookie{cookie}
|
|
}
|
|
|
|
// GetMapdvReply represents the data returned from a GetMapdv request.
|
|
type GetMapdvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float64
|
|
// padding: 8 bytes
|
|
Data []Float64 // size: xgb.Pad((int(N) * 8))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetMapdv request.
|
|
func (cook GetMapdvCookie) Reply() (*GetMapdvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getMapdvReply(buf), nil
|
|
}
|
|
|
|
// getMapdvReply reads a byte slice into a GetMapdvReply value.
|
|
func getMapdvReply(buf []byte) *GetMapdvReply {
|
|
v := new(GetMapdvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 1 // padding
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float64(xgb.Get64(buf[b:]))
|
|
b += 8
|
|
|
|
b += 8 // padding
|
|
|
|
v.Data = make([]Float64, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float64(xgb.Get64(buf[b:]))
|
|
b += 8
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getMapdvRequest writes a GetMapdv request to a byte slice for transfer.
|
|
func getMapdvRequest(c *xgb.Conn, ContextTag ContextTag, Target, Query uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 120 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Query)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetMapfvCookie is a cookie used only for GetMapfv requests.
|
|
type GetMapfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetMapfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetMapfvCookie.Reply.
|
|
func GetMapfv(c *xgb.Conn, ContextTag ContextTag, Target, Query uint32) GetMapfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMapfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getMapfvRequest(c, ContextTag, Target, Query), cookie)
|
|
return GetMapfvCookie{cookie}
|
|
}
|
|
|
|
// GetMapfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetMapfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Query uint32) GetMapfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMapfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getMapfvRequest(c, ContextTag, Target, Query), cookie)
|
|
return GetMapfvCookie{cookie}
|
|
}
|
|
|
|
// GetMapfvReply represents the data returned from a GetMapfv request.
|
|
type GetMapfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetMapfv request.
|
|
func (cook GetMapfvCookie) Reply() (*GetMapfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getMapfvReply(buf), nil
|
|
}
|
|
|
|
// getMapfvReply reads a byte slice into a GetMapfvReply value.
|
|
func getMapfvReply(buf []byte) *GetMapfvReply {
|
|
v := new(GetMapfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getMapfvRequest writes a GetMapfv request to a byte slice for transfer.
|
|
func getMapfvRequest(c *xgb.Conn, ContextTag ContextTag, Target, Query uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 121 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Query)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetMapivCookie is a cookie used only for GetMapiv requests.
|
|
type GetMapivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetMapiv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetMapivCookie.Reply.
|
|
func GetMapiv(c *xgb.Conn, ContextTag ContextTag, Target, Query uint32) GetMapivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMapiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getMapivRequest(c, ContextTag, Target, Query), cookie)
|
|
return GetMapivCookie{cookie}
|
|
}
|
|
|
|
// GetMapivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetMapivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Query uint32) GetMapivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMapiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getMapivRequest(c, ContextTag, Target, Query), cookie)
|
|
return GetMapivCookie{cookie}
|
|
}
|
|
|
|
// GetMapivReply represents the data returned from a GetMapiv request.
|
|
type GetMapivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetMapiv request.
|
|
func (cook GetMapivCookie) Reply() (*GetMapivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getMapivReply(buf), nil
|
|
}
|
|
|
|
// getMapivReply reads a byte slice into a GetMapivReply value.
|
|
func getMapivReply(buf []byte) *GetMapivReply {
|
|
v := new(GetMapivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getMapivRequest writes a GetMapiv request to a byte slice for transfer.
|
|
func getMapivRequest(c *xgb.Conn, ContextTag ContextTag, Target, Query uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 122 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Query)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetMaterialfvCookie is a cookie used only for GetMaterialfv requests.
|
|
type GetMaterialfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetMaterialfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetMaterialfvCookie.Reply.
|
|
func GetMaterialfv(c *xgb.Conn, ContextTag ContextTag, Face, Pname uint32) GetMaterialfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMaterialfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getMaterialfvRequest(c, ContextTag, Face, Pname), cookie)
|
|
return GetMaterialfvCookie{cookie}
|
|
}
|
|
|
|
// GetMaterialfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetMaterialfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Face, Pname uint32) GetMaterialfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMaterialfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getMaterialfvRequest(c, ContextTag, Face, Pname), cookie)
|
|
return GetMaterialfvCookie{cookie}
|
|
}
|
|
|
|
// GetMaterialfvReply represents the data returned from a GetMaterialfv request.
|
|
type GetMaterialfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetMaterialfv request.
|
|
func (cook GetMaterialfvCookie) Reply() (*GetMaterialfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getMaterialfvReply(buf), nil
|
|
}
|
|
|
|
// getMaterialfvReply reads a byte slice into a GetMaterialfvReply value.
|
|
func getMaterialfvReply(buf []byte) *GetMaterialfvReply {
|
|
v := new(GetMaterialfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getMaterialfvRequest writes a GetMaterialfv request to a byte slice for transfer.
|
|
func getMaterialfvRequest(c *xgb.Conn, ContextTag ContextTag, Face, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 123 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Face)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetMaterialivCookie is a cookie used only for GetMaterialiv requests.
|
|
type GetMaterialivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetMaterialiv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetMaterialivCookie.Reply.
|
|
func GetMaterialiv(c *xgb.Conn, ContextTag ContextTag, Face, Pname uint32) GetMaterialivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMaterialiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getMaterialivRequest(c, ContextTag, Face, Pname), cookie)
|
|
return GetMaterialivCookie{cookie}
|
|
}
|
|
|
|
// GetMaterialivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetMaterialivUnchecked(c *xgb.Conn, ContextTag ContextTag, Face, Pname uint32) GetMaterialivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMaterialiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getMaterialivRequest(c, ContextTag, Face, Pname), cookie)
|
|
return GetMaterialivCookie{cookie}
|
|
}
|
|
|
|
// GetMaterialivReply represents the data returned from a GetMaterialiv request.
|
|
type GetMaterialivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetMaterialiv request.
|
|
func (cook GetMaterialivCookie) Reply() (*GetMaterialivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getMaterialivReply(buf), nil
|
|
}
|
|
|
|
// getMaterialivReply reads a byte slice into a GetMaterialivReply value.
|
|
func getMaterialivReply(buf []byte) *GetMaterialivReply {
|
|
v := new(GetMaterialivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getMaterialivRequest writes a GetMaterialiv request to a byte slice for transfer.
|
|
func getMaterialivRequest(c *xgb.Conn, ContextTag ContextTag, Face, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 124 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Face)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetMinmaxCookie is a cookie used only for GetMinmax requests.
|
|
type GetMinmaxCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetMinmax sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetMinmaxCookie.Reply.
|
|
func GetMinmax(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes, Reset bool) GetMinmaxCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMinmax' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getMinmaxRequest(c, ContextTag, Target, Format, Type, SwapBytes, Reset), cookie)
|
|
return GetMinmaxCookie{cookie}
|
|
}
|
|
|
|
// GetMinmaxUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetMinmaxUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes, Reset bool) GetMinmaxCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMinmax' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getMinmaxRequest(c, ContextTag, Target, Format, Type, SwapBytes, Reset), cookie)
|
|
return GetMinmaxCookie{cookie}
|
|
}
|
|
|
|
// GetMinmaxReply represents the data returned from a GetMinmax request.
|
|
type GetMinmaxReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 24 bytes
|
|
Data []byte // size: xgb.Pad(((int(Length) * 4) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetMinmax request.
|
|
func (cook GetMinmaxCookie) Reply() (*GetMinmaxReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getMinmaxReply(buf), nil
|
|
}
|
|
|
|
// getMinmaxReply reads a byte slice into a GetMinmaxReply value.
|
|
func getMinmaxReply(buf []byte) *GetMinmaxReply {
|
|
v := new(GetMinmaxReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 24 // padding
|
|
|
|
v.Data = make([]byte, (int(v.Length) * 4))
|
|
copy(v.Data[:(int(v.Length)*4)], buf[b:])
|
|
b += int((int(v.Length) * 4))
|
|
|
|
return v
|
|
}
|
|
|
|
// getMinmaxRequest writes a GetMinmax request to a byte slice for transfer.
|
|
func getMinmaxRequest(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes, Reset bool) []byte {
|
|
size := 24
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 157 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Format)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Type)
|
|
b += 4
|
|
|
|
if SwapBytes {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
if Reset {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetMinmaxParameterfvCookie is a cookie used only for GetMinmaxParameterfv requests.
|
|
type GetMinmaxParameterfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetMinmaxParameterfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetMinmaxParameterfvCookie.Reply.
|
|
func GetMinmaxParameterfv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetMinmaxParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMinmaxParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getMinmaxParameterfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetMinmaxParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetMinmaxParameterfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetMinmaxParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetMinmaxParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMinmaxParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getMinmaxParameterfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetMinmaxParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetMinmaxParameterfvReply represents the data returned from a GetMinmaxParameterfv request.
|
|
type GetMinmaxParameterfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetMinmaxParameterfv request.
|
|
func (cook GetMinmaxParameterfvCookie) Reply() (*GetMinmaxParameterfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getMinmaxParameterfvReply(buf), nil
|
|
}
|
|
|
|
// getMinmaxParameterfvReply reads a byte slice into a GetMinmaxParameterfvReply value.
|
|
func getMinmaxParameterfvReply(buf []byte) *GetMinmaxParameterfvReply {
|
|
v := new(GetMinmaxParameterfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getMinmaxParameterfvRequest writes a GetMinmaxParameterfv request to a byte slice for transfer.
|
|
func getMinmaxParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 158 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetMinmaxParameterivCookie is a cookie used only for GetMinmaxParameteriv requests.
|
|
type GetMinmaxParameterivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetMinmaxParameteriv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetMinmaxParameterivCookie.Reply.
|
|
func GetMinmaxParameteriv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetMinmaxParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMinmaxParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getMinmaxParameterivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetMinmaxParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetMinmaxParameterivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetMinmaxParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetMinmaxParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetMinmaxParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getMinmaxParameterivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetMinmaxParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetMinmaxParameterivReply represents the data returned from a GetMinmaxParameteriv request.
|
|
type GetMinmaxParameterivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetMinmaxParameteriv request.
|
|
func (cook GetMinmaxParameterivCookie) Reply() (*GetMinmaxParameterivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getMinmaxParameterivReply(buf), nil
|
|
}
|
|
|
|
// getMinmaxParameterivReply reads a byte slice into a GetMinmaxParameterivReply value.
|
|
func getMinmaxParameterivReply(buf []byte) *GetMinmaxParameterivReply {
|
|
v := new(GetMinmaxParameterivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getMinmaxParameterivRequest writes a GetMinmaxParameteriv request to a byte slice for transfer.
|
|
func getMinmaxParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 159 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetPixelMapfvCookie is a cookie used only for GetPixelMapfv requests.
|
|
type GetPixelMapfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetPixelMapfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetPixelMapfvCookie.Reply.
|
|
func GetPixelMapfv(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetPixelMapfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getPixelMapfvRequest(c, ContextTag, Map), cookie)
|
|
return GetPixelMapfvCookie{cookie}
|
|
}
|
|
|
|
// GetPixelMapfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetPixelMapfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetPixelMapfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getPixelMapfvRequest(c, ContextTag, Map), cookie)
|
|
return GetPixelMapfvCookie{cookie}
|
|
}
|
|
|
|
// GetPixelMapfvReply represents the data returned from a GetPixelMapfv request.
|
|
type GetPixelMapfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetPixelMapfv request.
|
|
func (cook GetPixelMapfvCookie) Reply() (*GetPixelMapfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getPixelMapfvReply(buf), nil
|
|
}
|
|
|
|
// getPixelMapfvReply reads a byte slice into a GetPixelMapfvReply value.
|
|
func getPixelMapfvReply(buf []byte) *GetPixelMapfvReply {
|
|
v := new(GetPixelMapfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getPixelMapfvRequest writes a GetPixelMapfv request to a byte slice for transfer.
|
|
func getPixelMapfvRequest(c *xgb.Conn, ContextTag ContextTag, Map uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 125 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Map)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetPixelMapuivCookie is a cookie used only for GetPixelMapuiv requests.
|
|
type GetPixelMapuivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetPixelMapuiv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetPixelMapuivCookie.Reply.
|
|
func GetPixelMapuiv(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapuivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetPixelMapuiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getPixelMapuivRequest(c, ContextTag, Map), cookie)
|
|
return GetPixelMapuivCookie{cookie}
|
|
}
|
|
|
|
// GetPixelMapuivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetPixelMapuivUnchecked(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapuivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetPixelMapuiv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getPixelMapuivRequest(c, ContextTag, Map), cookie)
|
|
return GetPixelMapuivCookie{cookie}
|
|
}
|
|
|
|
// GetPixelMapuivReply represents the data returned from a GetPixelMapuiv request.
|
|
type GetPixelMapuivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum uint32
|
|
// padding: 12 bytes
|
|
Data []uint32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetPixelMapuiv request.
|
|
func (cook GetPixelMapuivCookie) Reply() (*GetPixelMapuivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getPixelMapuivReply(buf), nil
|
|
}
|
|
|
|
// getPixelMapuivReply reads a byte slice into a GetPixelMapuivReply value.
|
|
func getPixelMapuivReply(buf []byte) *GetPixelMapuivReply {
|
|
v := new(GetPixelMapuivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]uint32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = xgb.Get32(buf[b:])
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getPixelMapuivRequest writes a GetPixelMapuiv request to a byte slice for transfer.
|
|
func getPixelMapuivRequest(c *xgb.Conn, ContextTag ContextTag, Map uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 126 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Map)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetPixelMapusvCookie is a cookie used only for GetPixelMapusv requests.
|
|
type GetPixelMapusvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetPixelMapusv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetPixelMapusvCookie.Reply.
|
|
func GetPixelMapusv(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapusvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetPixelMapusv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getPixelMapusvRequest(c, ContextTag, Map), cookie)
|
|
return GetPixelMapusvCookie{cookie}
|
|
}
|
|
|
|
// GetPixelMapusvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetPixelMapusvUnchecked(c *xgb.Conn, ContextTag ContextTag, Map uint32) GetPixelMapusvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetPixelMapusv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getPixelMapusvRequest(c, ContextTag, Map), cookie)
|
|
return GetPixelMapusvCookie{cookie}
|
|
}
|
|
|
|
// GetPixelMapusvReply represents the data returned from a GetPixelMapusv request.
|
|
type GetPixelMapusvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum uint16
|
|
// padding: 16 bytes
|
|
Data []uint16 // size: xgb.Pad((int(N) * 2))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetPixelMapusv request.
|
|
func (cook GetPixelMapusvCookie) Reply() (*GetPixelMapusvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getPixelMapusvReply(buf), nil
|
|
}
|
|
|
|
// getPixelMapusvReply reads a byte slice into a GetPixelMapusvReply value.
|
|
func getPixelMapusvReply(buf []byte) *GetPixelMapusvReply {
|
|
v := new(GetPixelMapusvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
b += 16 // padding
|
|
|
|
v.Data = make([]uint16, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = xgb.Get16(buf[b:])
|
|
b += 2
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getPixelMapusvRequest writes a GetPixelMapusv request to a byte slice for transfer.
|
|
func getPixelMapusvRequest(c *xgb.Conn, ContextTag ContextTag, Map uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 127 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Map)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetPolygonStippleCookie is a cookie used only for GetPolygonStipple requests.
|
|
type GetPolygonStippleCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetPolygonStipple sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetPolygonStippleCookie.Reply.
|
|
func GetPolygonStipple(c *xgb.Conn, ContextTag ContextTag, LsbFirst bool) GetPolygonStippleCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetPolygonStipple' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getPolygonStippleRequest(c, ContextTag, LsbFirst), cookie)
|
|
return GetPolygonStippleCookie{cookie}
|
|
}
|
|
|
|
// GetPolygonStippleUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetPolygonStippleUnchecked(c *xgb.Conn, ContextTag ContextTag, LsbFirst bool) GetPolygonStippleCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetPolygonStipple' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getPolygonStippleRequest(c, ContextTag, LsbFirst), cookie)
|
|
return GetPolygonStippleCookie{cookie}
|
|
}
|
|
|
|
// GetPolygonStippleReply represents the data returned from a GetPolygonStipple request.
|
|
type GetPolygonStippleReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 24 bytes
|
|
Data []byte // size: xgb.Pad(((int(Length) * 4) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetPolygonStipple request.
|
|
func (cook GetPolygonStippleCookie) Reply() (*GetPolygonStippleReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getPolygonStippleReply(buf), nil
|
|
}
|
|
|
|
// getPolygonStippleReply reads a byte slice into a GetPolygonStippleReply value.
|
|
func getPolygonStippleReply(buf []byte) *GetPolygonStippleReply {
|
|
v := new(GetPolygonStippleReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 24 // padding
|
|
|
|
v.Data = make([]byte, (int(v.Length) * 4))
|
|
copy(v.Data[:(int(v.Length)*4)], buf[b:])
|
|
b += int((int(v.Length) * 4))
|
|
|
|
return v
|
|
}
|
|
|
|
// getPolygonStippleRequest writes a GetPolygonStipple request to a byte slice for transfer.
|
|
func getPolygonStippleRequest(c *xgb.Conn, ContextTag ContextTag, LsbFirst bool) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 128 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
if LsbFirst {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetQueryObjectivARBCookie is a cookie used only for GetQueryObjectivARB requests.
|
|
type GetQueryObjectivARBCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetQueryObjectivARB sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetQueryObjectivARBCookie.Reply.
|
|
func GetQueryObjectivARB(c *xgb.Conn, ContextTag ContextTag, Id, Pname uint32) GetQueryObjectivARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetQueryObjectivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getQueryObjectivARBRequest(c, ContextTag, Id, Pname), cookie)
|
|
return GetQueryObjectivARBCookie{cookie}
|
|
}
|
|
|
|
// GetQueryObjectivARBUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetQueryObjectivARBUnchecked(c *xgb.Conn, ContextTag ContextTag, Id, Pname uint32) GetQueryObjectivARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetQueryObjectivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getQueryObjectivARBRequest(c, ContextTag, Id, Pname), cookie)
|
|
return GetQueryObjectivARBCookie{cookie}
|
|
}
|
|
|
|
// GetQueryObjectivARBReply represents the data returned from a GetQueryObjectivARB request.
|
|
type GetQueryObjectivARBReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetQueryObjectivARB request.
|
|
func (cook GetQueryObjectivARBCookie) Reply() (*GetQueryObjectivARBReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getQueryObjectivARBReply(buf), nil
|
|
}
|
|
|
|
// getQueryObjectivARBReply reads a byte slice into a GetQueryObjectivARBReply value.
|
|
func getQueryObjectivARBReply(buf []byte) *GetQueryObjectivARBReply {
|
|
v := new(GetQueryObjectivARBReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getQueryObjectivARBRequest writes a GetQueryObjectivARB request to a byte slice for transfer.
|
|
func getQueryObjectivARBRequest(c *xgb.Conn, ContextTag ContextTag, Id, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 165 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Id)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetQueryObjectuivARBCookie is a cookie used only for GetQueryObjectuivARB requests.
|
|
type GetQueryObjectuivARBCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetQueryObjectuivARB sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetQueryObjectuivARBCookie.Reply.
|
|
func GetQueryObjectuivARB(c *xgb.Conn, ContextTag ContextTag, Id, Pname uint32) GetQueryObjectuivARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetQueryObjectuivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getQueryObjectuivARBRequest(c, ContextTag, Id, Pname), cookie)
|
|
return GetQueryObjectuivARBCookie{cookie}
|
|
}
|
|
|
|
// GetQueryObjectuivARBUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetQueryObjectuivARBUnchecked(c *xgb.Conn, ContextTag ContextTag, Id, Pname uint32) GetQueryObjectuivARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetQueryObjectuivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getQueryObjectuivARBRequest(c, ContextTag, Id, Pname), cookie)
|
|
return GetQueryObjectuivARBCookie{cookie}
|
|
}
|
|
|
|
// GetQueryObjectuivARBReply represents the data returned from a GetQueryObjectuivARB request.
|
|
type GetQueryObjectuivARBReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum uint32
|
|
// padding: 12 bytes
|
|
Data []uint32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetQueryObjectuivARB request.
|
|
func (cook GetQueryObjectuivARBCookie) Reply() (*GetQueryObjectuivARBReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getQueryObjectuivARBReply(buf), nil
|
|
}
|
|
|
|
// getQueryObjectuivARBReply reads a byte slice into a GetQueryObjectuivARBReply value.
|
|
func getQueryObjectuivARBReply(buf []byte) *GetQueryObjectuivARBReply {
|
|
v := new(GetQueryObjectuivARBReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]uint32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = xgb.Get32(buf[b:])
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getQueryObjectuivARBRequest writes a GetQueryObjectuivARB request to a byte slice for transfer.
|
|
func getQueryObjectuivARBRequest(c *xgb.Conn, ContextTag ContextTag, Id, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 166 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Id)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetQueryivARBCookie is a cookie used only for GetQueryivARB requests.
|
|
type GetQueryivARBCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetQueryivARB sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetQueryivARBCookie.Reply.
|
|
func GetQueryivARB(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetQueryivARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetQueryivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getQueryivARBRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetQueryivARBCookie{cookie}
|
|
}
|
|
|
|
// GetQueryivARBUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetQueryivARBUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetQueryivARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetQueryivARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getQueryivARBRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetQueryivARBCookie{cookie}
|
|
}
|
|
|
|
// GetQueryivARBReply represents the data returned from a GetQueryivARB request.
|
|
type GetQueryivARBReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetQueryivARB request.
|
|
func (cook GetQueryivARBCookie) Reply() (*GetQueryivARBReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getQueryivARBReply(buf), nil
|
|
}
|
|
|
|
// getQueryivARBReply reads a byte slice into a GetQueryivARBReply value.
|
|
func getQueryivARBReply(buf []byte) *GetQueryivARBReply {
|
|
v := new(GetQueryivARBReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getQueryivARBRequest writes a GetQueryivARB request to a byte slice for transfer.
|
|
func getQueryivARBRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 164 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetSeparableFilterCookie is a cookie used only for GetSeparableFilter requests.
|
|
type GetSeparableFilterCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetSeparableFilter sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetSeparableFilterCookie.Reply.
|
|
func GetSeparableFilter(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes bool) GetSeparableFilterCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetSeparableFilter' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getSeparableFilterRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie)
|
|
return GetSeparableFilterCookie{cookie}
|
|
}
|
|
|
|
// GetSeparableFilterUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetSeparableFilterUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes bool) GetSeparableFilterCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetSeparableFilter' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getSeparableFilterRequest(c, ContextTag, Target, Format, Type, SwapBytes), cookie)
|
|
return GetSeparableFilterCookie{cookie}
|
|
}
|
|
|
|
// GetSeparableFilterReply represents the data returned from a GetSeparableFilter request.
|
|
type GetSeparableFilterReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 8 bytes
|
|
RowW int32
|
|
ColH int32
|
|
// padding: 8 bytes
|
|
RowsAndCols []byte // size: xgb.Pad(((int(Length) * 4) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetSeparableFilter request.
|
|
func (cook GetSeparableFilterCookie) Reply() (*GetSeparableFilterReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getSeparableFilterReply(buf), nil
|
|
}
|
|
|
|
// getSeparableFilterReply reads a byte slice into a GetSeparableFilterReply value.
|
|
func getSeparableFilterReply(buf []byte) *GetSeparableFilterReply {
|
|
v := new(GetSeparableFilterReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 8 // padding
|
|
|
|
v.RowW = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
v.ColH = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 8 // padding
|
|
|
|
v.RowsAndCols = make([]byte, (int(v.Length) * 4))
|
|
copy(v.RowsAndCols[:(int(v.Length)*4)], buf[b:])
|
|
b += int((int(v.Length) * 4))
|
|
|
|
return v
|
|
}
|
|
|
|
// getSeparableFilterRequest writes a GetSeparableFilter request to a byte slice for transfer.
|
|
func getSeparableFilterRequest(c *xgb.Conn, ContextTag ContextTag, Target, Format, Type uint32, SwapBytes bool) []byte {
|
|
size := 24
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 153 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Format)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Type)
|
|
b += 4
|
|
|
|
if SwapBytes {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetStringCookie is a cookie used only for GetString requests.
|
|
type GetStringCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetString sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetStringCookie.Reply.
|
|
func GetString(c *xgb.Conn, ContextTag ContextTag, Name uint32) GetStringCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getStringRequest(c, ContextTag, Name), cookie)
|
|
return GetStringCookie{cookie}
|
|
}
|
|
|
|
// GetStringUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetStringUnchecked(c *xgb.Conn, ContextTag ContextTag, Name uint32) GetStringCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getStringRequest(c, ContextTag, Name), cookie)
|
|
return GetStringCookie{cookie}
|
|
}
|
|
|
|
// GetStringReply represents the data returned from a GetString request.
|
|
type GetStringReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
// padding: 16 bytes
|
|
String string // size: xgb.Pad((int(N) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetString request.
|
|
func (cook GetStringCookie) Reply() (*GetStringReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getStringReply(buf), nil
|
|
}
|
|
|
|
// getStringReply reads a byte slice into a GetStringReply value.
|
|
func getStringReply(buf []byte) *GetStringReply {
|
|
v := new(GetStringReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 16 // padding
|
|
|
|
{
|
|
byteString := make([]byte, v.N)
|
|
copy(byteString[:v.N], buf[b:])
|
|
v.String = string(byteString)
|
|
b += int(v.N)
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getStringRequest writes a GetString request to a byte slice for transfer.
|
|
func getStringRequest(c *xgb.Conn, ContextTag ContextTag, Name uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 129 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Name)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetTexEnvfvCookie is a cookie used only for GetTexEnvfv requests.
|
|
type GetTexEnvfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetTexEnvfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetTexEnvfvCookie.Reply.
|
|
func GetTexEnvfv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetTexEnvfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexEnvfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getTexEnvfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetTexEnvfvCookie{cookie}
|
|
}
|
|
|
|
// GetTexEnvfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetTexEnvfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetTexEnvfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexEnvfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getTexEnvfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetTexEnvfvCookie{cookie}
|
|
}
|
|
|
|
// GetTexEnvfvReply represents the data returned from a GetTexEnvfv request.
|
|
type GetTexEnvfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetTexEnvfv request.
|
|
func (cook GetTexEnvfvCookie) Reply() (*GetTexEnvfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getTexEnvfvReply(buf), nil
|
|
}
|
|
|
|
// getTexEnvfvReply reads a byte slice into a GetTexEnvfvReply value.
|
|
func getTexEnvfvReply(buf []byte) *GetTexEnvfvReply {
|
|
v := new(GetTexEnvfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getTexEnvfvRequest writes a GetTexEnvfv request to a byte slice for transfer.
|
|
func getTexEnvfvRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 130 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetTexEnvivCookie is a cookie used only for GetTexEnviv requests.
|
|
type GetTexEnvivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetTexEnviv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetTexEnvivCookie.Reply.
|
|
func GetTexEnviv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetTexEnvivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexEnviv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getTexEnvivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetTexEnvivCookie{cookie}
|
|
}
|
|
|
|
// GetTexEnvivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetTexEnvivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetTexEnvivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexEnviv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getTexEnvivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetTexEnvivCookie{cookie}
|
|
}
|
|
|
|
// GetTexEnvivReply represents the data returned from a GetTexEnviv request.
|
|
type GetTexEnvivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetTexEnviv request.
|
|
func (cook GetTexEnvivCookie) Reply() (*GetTexEnvivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getTexEnvivReply(buf), nil
|
|
}
|
|
|
|
// getTexEnvivReply reads a byte slice into a GetTexEnvivReply value.
|
|
func getTexEnvivReply(buf []byte) *GetTexEnvivReply {
|
|
v := new(GetTexEnvivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getTexEnvivRequest writes a GetTexEnviv request to a byte slice for transfer.
|
|
func getTexEnvivRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 131 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetTexGendvCookie is a cookie used only for GetTexGendv requests.
|
|
type GetTexGendvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetTexGendv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetTexGendvCookie.Reply.
|
|
func GetTexGendv(c *xgb.Conn, ContextTag ContextTag, Coord, Pname uint32) GetTexGendvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexGendv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getTexGendvRequest(c, ContextTag, Coord, Pname), cookie)
|
|
return GetTexGendvCookie{cookie}
|
|
}
|
|
|
|
// GetTexGendvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetTexGendvUnchecked(c *xgb.Conn, ContextTag ContextTag, Coord, Pname uint32) GetTexGendvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexGendv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getTexGendvRequest(c, ContextTag, Coord, Pname), cookie)
|
|
return GetTexGendvCookie{cookie}
|
|
}
|
|
|
|
// GetTexGendvReply represents the data returned from a GetTexGendv request.
|
|
type GetTexGendvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float64
|
|
// padding: 8 bytes
|
|
Data []Float64 // size: xgb.Pad((int(N) * 8))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetTexGendv request.
|
|
func (cook GetTexGendvCookie) Reply() (*GetTexGendvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getTexGendvReply(buf), nil
|
|
}
|
|
|
|
// getTexGendvReply reads a byte slice into a GetTexGendvReply value.
|
|
func getTexGendvReply(buf []byte) *GetTexGendvReply {
|
|
v := new(GetTexGendvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 1 // padding
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float64(xgb.Get64(buf[b:]))
|
|
b += 8
|
|
|
|
b += 8 // padding
|
|
|
|
v.Data = make([]Float64, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float64(xgb.Get64(buf[b:]))
|
|
b += 8
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getTexGendvRequest writes a GetTexGendv request to a byte slice for transfer.
|
|
func getTexGendvRequest(c *xgb.Conn, ContextTag ContextTag, Coord, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 132 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Coord)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetTexGenfvCookie is a cookie used only for GetTexGenfv requests.
|
|
type GetTexGenfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetTexGenfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetTexGenfvCookie.Reply.
|
|
func GetTexGenfv(c *xgb.Conn, ContextTag ContextTag, Coord, Pname uint32) GetTexGenfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexGenfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getTexGenfvRequest(c, ContextTag, Coord, Pname), cookie)
|
|
return GetTexGenfvCookie{cookie}
|
|
}
|
|
|
|
// GetTexGenfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetTexGenfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Coord, Pname uint32) GetTexGenfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexGenfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getTexGenfvRequest(c, ContextTag, Coord, Pname), cookie)
|
|
return GetTexGenfvCookie{cookie}
|
|
}
|
|
|
|
// GetTexGenfvReply represents the data returned from a GetTexGenfv request.
|
|
type GetTexGenfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetTexGenfv request.
|
|
func (cook GetTexGenfvCookie) Reply() (*GetTexGenfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getTexGenfvReply(buf), nil
|
|
}
|
|
|
|
// getTexGenfvReply reads a byte slice into a GetTexGenfvReply value.
|
|
func getTexGenfvReply(buf []byte) *GetTexGenfvReply {
|
|
v := new(GetTexGenfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getTexGenfvRequest writes a GetTexGenfv request to a byte slice for transfer.
|
|
func getTexGenfvRequest(c *xgb.Conn, ContextTag ContextTag, Coord, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 133 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Coord)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetTexGenivCookie is a cookie used only for GetTexGeniv requests.
|
|
type GetTexGenivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetTexGeniv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetTexGenivCookie.Reply.
|
|
func GetTexGeniv(c *xgb.Conn, ContextTag ContextTag, Coord, Pname uint32) GetTexGenivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexGeniv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getTexGenivRequest(c, ContextTag, Coord, Pname), cookie)
|
|
return GetTexGenivCookie{cookie}
|
|
}
|
|
|
|
// GetTexGenivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetTexGenivUnchecked(c *xgb.Conn, ContextTag ContextTag, Coord, Pname uint32) GetTexGenivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexGeniv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getTexGenivRequest(c, ContextTag, Coord, Pname), cookie)
|
|
return GetTexGenivCookie{cookie}
|
|
}
|
|
|
|
// GetTexGenivReply represents the data returned from a GetTexGeniv request.
|
|
type GetTexGenivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetTexGeniv request.
|
|
func (cook GetTexGenivCookie) Reply() (*GetTexGenivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getTexGenivReply(buf), nil
|
|
}
|
|
|
|
// getTexGenivReply reads a byte slice into a GetTexGenivReply value.
|
|
func getTexGenivReply(buf []byte) *GetTexGenivReply {
|
|
v := new(GetTexGenivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getTexGenivRequest writes a GetTexGeniv request to a byte slice for transfer.
|
|
func getTexGenivRequest(c *xgb.Conn, ContextTag ContextTag, Coord, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 134 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Coord)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetTexImageCookie is a cookie used only for GetTexImage requests.
|
|
type GetTexImageCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetTexImage sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetTexImageCookie.Reply.
|
|
func GetTexImage(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Format, Type uint32, SwapBytes bool) GetTexImageCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexImage' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getTexImageRequest(c, ContextTag, Target, Level, Format, Type, SwapBytes), cookie)
|
|
return GetTexImageCookie{cookie}
|
|
}
|
|
|
|
// GetTexImageUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetTexImageUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Format, Type uint32, SwapBytes bool) GetTexImageCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexImage' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getTexImageRequest(c, ContextTag, Target, Level, Format, Type, SwapBytes), cookie)
|
|
return GetTexImageCookie{cookie}
|
|
}
|
|
|
|
// GetTexImageReply represents the data returned from a GetTexImage request.
|
|
type GetTexImageReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 8 bytes
|
|
Width int32
|
|
Height int32
|
|
Depth int32
|
|
// padding: 4 bytes
|
|
Data []byte // size: xgb.Pad(((int(Length) * 4) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetTexImage request.
|
|
func (cook GetTexImageCookie) Reply() (*GetTexImageReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getTexImageReply(buf), nil
|
|
}
|
|
|
|
// getTexImageReply reads a byte slice into a GetTexImageReply value.
|
|
func getTexImageReply(buf []byte) *GetTexImageReply {
|
|
v := new(GetTexImageReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 8 // padding
|
|
|
|
v.Width = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
v.Height = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
v.Depth = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.Data = make([]byte, (int(v.Length) * 4))
|
|
copy(v.Data[:(int(v.Length)*4)], buf[b:])
|
|
b += int((int(v.Length) * 4))
|
|
|
|
return v
|
|
}
|
|
|
|
// getTexImageRequest writes a GetTexImage request to a byte slice for transfer.
|
|
func getTexImageRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Format, Type uint32, SwapBytes bool) []byte {
|
|
size := 28
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 135 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Level))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Format)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Type)
|
|
b += 4
|
|
|
|
if SwapBytes {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetTexLevelParameterfvCookie is a cookie used only for GetTexLevelParameterfv requests.
|
|
type GetTexLevelParameterfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetTexLevelParameterfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetTexLevelParameterfvCookie.Reply.
|
|
func GetTexLevelParameterfv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) GetTexLevelParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexLevelParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getTexLevelParameterfvRequest(c, ContextTag, Target, Level, Pname), cookie)
|
|
return GetTexLevelParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetTexLevelParameterfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetTexLevelParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) GetTexLevelParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexLevelParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getTexLevelParameterfvRequest(c, ContextTag, Target, Level, Pname), cookie)
|
|
return GetTexLevelParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetTexLevelParameterfvReply represents the data returned from a GetTexLevelParameterfv request.
|
|
type GetTexLevelParameterfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetTexLevelParameterfv request.
|
|
func (cook GetTexLevelParameterfvCookie) Reply() (*GetTexLevelParameterfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getTexLevelParameterfvReply(buf), nil
|
|
}
|
|
|
|
// getTexLevelParameterfvReply reads a byte slice into a GetTexLevelParameterfvReply value.
|
|
func getTexLevelParameterfvReply(buf []byte) *GetTexLevelParameterfvReply {
|
|
v := new(GetTexLevelParameterfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getTexLevelParameterfvRequest writes a GetTexLevelParameterfv request to a byte slice for transfer.
|
|
func getTexLevelParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) []byte {
|
|
size := 20
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 138 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Level))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetTexLevelParameterivCookie is a cookie used only for GetTexLevelParameteriv requests.
|
|
type GetTexLevelParameterivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetTexLevelParameteriv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetTexLevelParameterivCookie.Reply.
|
|
func GetTexLevelParameteriv(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) GetTexLevelParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexLevelParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getTexLevelParameterivRequest(c, ContextTag, Target, Level, Pname), cookie)
|
|
return GetTexLevelParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetTexLevelParameterivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetTexLevelParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) GetTexLevelParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexLevelParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getTexLevelParameterivRequest(c, ContextTag, Target, Level, Pname), cookie)
|
|
return GetTexLevelParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetTexLevelParameterivReply represents the data returned from a GetTexLevelParameteriv request.
|
|
type GetTexLevelParameterivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetTexLevelParameteriv request.
|
|
func (cook GetTexLevelParameterivCookie) Reply() (*GetTexLevelParameterivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getTexLevelParameterivReply(buf), nil
|
|
}
|
|
|
|
// getTexLevelParameterivReply reads a byte slice into a GetTexLevelParameterivReply value.
|
|
func getTexLevelParameterivReply(buf []byte) *GetTexLevelParameterivReply {
|
|
v := new(GetTexLevelParameterivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getTexLevelParameterivRequest writes a GetTexLevelParameteriv request to a byte slice for transfer.
|
|
func getTexLevelParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target uint32, Level int32, Pname uint32) []byte {
|
|
size := 20
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 139 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Level))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetTexParameterfvCookie is a cookie used only for GetTexParameterfv requests.
|
|
type GetTexParameterfvCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetTexParameterfv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetTexParameterfvCookie.Reply.
|
|
func GetTexParameterfv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetTexParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getTexParameterfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetTexParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetTexParameterfvUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetTexParameterfvUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetTexParameterfvCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexParameterfv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getTexParameterfvRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetTexParameterfvCookie{cookie}
|
|
}
|
|
|
|
// GetTexParameterfvReply represents the data returned from a GetTexParameterfv request.
|
|
type GetTexParameterfvReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum Float32
|
|
// padding: 12 bytes
|
|
Data []Float32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetTexParameterfv request.
|
|
func (cook GetTexParameterfvCookie) Reply() (*GetTexParameterfvReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getTexParameterfvReply(buf), nil
|
|
}
|
|
|
|
// getTexParameterfvReply reads a byte slice into a GetTexParameterfvReply value.
|
|
func getTexParameterfvReply(buf []byte) *GetTexParameterfvReply {
|
|
v := new(GetTexParameterfvReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]Float32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = Float32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getTexParameterfvRequest writes a GetTexParameterfv request to a byte slice for transfer.
|
|
func getTexParameterfvRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 136 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetTexParameterivCookie is a cookie used only for GetTexParameteriv requests.
|
|
type GetTexParameterivCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetTexParameteriv sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetTexParameterivCookie.Reply.
|
|
func GetTexParameteriv(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetTexParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getTexParameterivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetTexParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetTexParameterivUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetTexParameterivUnchecked(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) GetTexParameterivCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetTexParameteriv' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getTexParameterivRequest(c, ContextTag, Target, Pname), cookie)
|
|
return GetTexParameterivCookie{cookie}
|
|
}
|
|
|
|
// GetTexParameterivReply represents the data returned from a GetTexParameteriv request.
|
|
type GetTexParameterivReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
Datum int32
|
|
// padding: 12 bytes
|
|
Data []int32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetTexParameteriv request.
|
|
func (cook GetTexParameterivCookie) Reply() (*GetTexParameterivReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getTexParameterivReply(buf), nil
|
|
}
|
|
|
|
// getTexParameterivReply reads a byte slice into a GetTexParameterivReply value.
|
|
func getTexParameterivReply(buf []byte) *GetTexParameterivReply {
|
|
v := new(GetTexParameterivReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Datum = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]int32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = int32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getTexParameterivRequest writes a GetTexParameteriv request to a byte slice for transfer.
|
|
func getTexParameterivRequest(c *xgb.Conn, ContextTag ContextTag, Target, Pname uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 137 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Target)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// GetVisualConfigsCookie is a cookie used only for GetVisualConfigs requests.
|
|
type GetVisualConfigsCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// GetVisualConfigs sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling GetVisualConfigsCookie.Reply.
|
|
func GetVisualConfigs(c *xgb.Conn, Screen uint32) GetVisualConfigsCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetVisualConfigs' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(getVisualConfigsRequest(c, Screen), cookie)
|
|
return GetVisualConfigsCookie{cookie}
|
|
}
|
|
|
|
// GetVisualConfigsUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func GetVisualConfigsUnchecked(c *xgb.Conn, Screen uint32) GetVisualConfigsCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'GetVisualConfigs' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(getVisualConfigsRequest(c, Screen), cookie)
|
|
return GetVisualConfigsCookie{cookie}
|
|
}
|
|
|
|
// GetVisualConfigsReply represents the data returned from a GetVisualConfigs request.
|
|
type GetVisualConfigsReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
NumVisuals uint32
|
|
NumProperties uint32
|
|
// padding: 16 bytes
|
|
PropertyList []uint32 // size: xgb.Pad((int(Length) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a GetVisualConfigs request.
|
|
func (cook GetVisualConfigsCookie) Reply() (*GetVisualConfigsReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return getVisualConfigsReply(buf), nil
|
|
}
|
|
|
|
// getVisualConfigsReply reads a byte slice into a GetVisualConfigsReply value.
|
|
func getVisualConfigsReply(buf []byte) *GetVisualConfigsReply {
|
|
v := new(GetVisualConfigsReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.NumVisuals = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.NumProperties = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 16 // padding
|
|
|
|
v.PropertyList = make([]uint32, v.Length)
|
|
for i := 0; i < int(v.Length); i++ {
|
|
v.PropertyList[i] = xgb.Get32(buf[b:])
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// getVisualConfigsRequest writes a GetVisualConfigs request to a byte slice for transfer.
|
|
func getVisualConfigsRequest(c *xgb.Conn, Screen uint32) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 14 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], Screen)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// IsDirectCookie is a cookie used only for IsDirect requests.
|
|
type IsDirectCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// IsDirect sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling IsDirectCookie.Reply.
|
|
func IsDirect(c *xgb.Conn, Context Context) IsDirectCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'IsDirect' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(isDirectRequest(c, Context), cookie)
|
|
return IsDirectCookie{cookie}
|
|
}
|
|
|
|
// IsDirectUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func IsDirectUnchecked(c *xgb.Conn, Context Context) IsDirectCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'IsDirect' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(isDirectRequest(c, Context), cookie)
|
|
return IsDirectCookie{cookie}
|
|
}
|
|
|
|
// IsDirectReply represents the data returned from a IsDirect request.
|
|
type IsDirectReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
IsDirect bool
|
|
// padding: 23 bytes
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a IsDirect request.
|
|
func (cook IsDirectCookie) Reply() (*IsDirectReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return isDirectReply(buf), nil
|
|
}
|
|
|
|
// isDirectReply reads a byte slice into a IsDirectReply value.
|
|
func isDirectReply(buf []byte) *IsDirectReply {
|
|
v := new(IsDirectReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
if buf[b] == 1 {
|
|
v.IsDirect = true
|
|
} else {
|
|
v.IsDirect = false
|
|
}
|
|
b += 1
|
|
|
|
b += 23 // padding
|
|
|
|
return v
|
|
}
|
|
|
|
// isDirectRequest writes a IsDirect request to a byte slice for transfer.
|
|
func isDirectRequest(c *xgb.Conn, Context Context) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 6 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Context))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// IsEnabledCookie is a cookie used only for IsEnabled requests.
|
|
type IsEnabledCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// IsEnabled sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling IsEnabledCookie.Reply.
|
|
func IsEnabled(c *xgb.Conn, ContextTag ContextTag, Capability uint32) IsEnabledCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'IsEnabled' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(isEnabledRequest(c, ContextTag, Capability), cookie)
|
|
return IsEnabledCookie{cookie}
|
|
}
|
|
|
|
// IsEnabledUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func IsEnabledUnchecked(c *xgb.Conn, ContextTag ContextTag, Capability uint32) IsEnabledCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'IsEnabled' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(isEnabledRequest(c, ContextTag, Capability), cookie)
|
|
return IsEnabledCookie{cookie}
|
|
}
|
|
|
|
// IsEnabledReply represents the data returned from a IsEnabled request.
|
|
type IsEnabledReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
RetVal Bool32
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a IsEnabled request.
|
|
func (cook IsEnabledCookie) Reply() (*IsEnabledReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return isEnabledReply(buf), nil
|
|
}
|
|
|
|
// isEnabledReply reads a byte slice into a IsEnabledReply value.
|
|
func isEnabledReply(buf []byte) *IsEnabledReply {
|
|
v := new(IsEnabledReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.RetVal = Bool32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
return v
|
|
}
|
|
|
|
// isEnabledRequest writes a IsEnabled request to a byte slice for transfer.
|
|
func isEnabledRequest(c *xgb.Conn, ContextTag ContextTag, Capability uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 140 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Capability)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// IsListCookie is a cookie used only for IsList requests.
|
|
type IsListCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// IsList sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling IsListCookie.Reply.
|
|
func IsList(c *xgb.Conn, ContextTag ContextTag, List uint32) IsListCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'IsList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(isListRequest(c, ContextTag, List), cookie)
|
|
return IsListCookie{cookie}
|
|
}
|
|
|
|
// IsListUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func IsListUnchecked(c *xgb.Conn, ContextTag ContextTag, List uint32) IsListCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'IsList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(isListRequest(c, ContextTag, List), cookie)
|
|
return IsListCookie{cookie}
|
|
}
|
|
|
|
// IsListReply represents the data returned from a IsList request.
|
|
type IsListReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
RetVal Bool32
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a IsList request.
|
|
func (cook IsListCookie) Reply() (*IsListReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return isListReply(buf), nil
|
|
}
|
|
|
|
// isListReply reads a byte slice into a IsListReply value.
|
|
func isListReply(buf []byte) *IsListReply {
|
|
v := new(IsListReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.RetVal = Bool32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
return v
|
|
}
|
|
|
|
// isListRequest writes a IsList request to a byte slice for transfer.
|
|
func isListRequest(c *xgb.Conn, ContextTag ContextTag, List uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 141 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], List)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// IsQueryARBCookie is a cookie used only for IsQueryARB requests.
|
|
type IsQueryARBCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// IsQueryARB sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling IsQueryARBCookie.Reply.
|
|
func IsQueryARB(c *xgb.Conn, ContextTag ContextTag, Id uint32) IsQueryARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'IsQueryARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(isQueryARBRequest(c, ContextTag, Id), cookie)
|
|
return IsQueryARBCookie{cookie}
|
|
}
|
|
|
|
// IsQueryARBUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func IsQueryARBUnchecked(c *xgb.Conn, ContextTag ContextTag, Id uint32) IsQueryARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'IsQueryARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(isQueryARBRequest(c, ContextTag, Id), cookie)
|
|
return IsQueryARBCookie{cookie}
|
|
}
|
|
|
|
// IsQueryARBReply represents the data returned from a IsQueryARB request.
|
|
type IsQueryARBReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
RetVal Bool32
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a IsQueryARB request.
|
|
func (cook IsQueryARBCookie) Reply() (*IsQueryARBReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return isQueryARBReply(buf), nil
|
|
}
|
|
|
|
// isQueryARBReply reads a byte slice into a IsQueryARBReply value.
|
|
func isQueryARBReply(buf []byte) *IsQueryARBReply {
|
|
v := new(IsQueryARBReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.RetVal = Bool32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
return v
|
|
}
|
|
|
|
// isQueryARBRequest writes a IsQueryARB request to a byte slice for transfer.
|
|
func isQueryARBRequest(c *xgb.Conn, ContextTag ContextTag, Id uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 163 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Id)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// IsTextureCookie is a cookie used only for IsTexture requests.
|
|
type IsTextureCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// IsTexture sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling IsTextureCookie.Reply.
|
|
func IsTexture(c *xgb.Conn, ContextTag ContextTag, Texture uint32) IsTextureCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'IsTexture' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(isTextureRequest(c, ContextTag, Texture), cookie)
|
|
return IsTextureCookie{cookie}
|
|
}
|
|
|
|
// IsTextureUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func IsTextureUnchecked(c *xgb.Conn, ContextTag ContextTag, Texture uint32) IsTextureCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'IsTexture' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(isTextureRequest(c, ContextTag, Texture), cookie)
|
|
return IsTextureCookie{cookie}
|
|
}
|
|
|
|
// IsTextureReply represents the data returned from a IsTexture request.
|
|
type IsTextureReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
RetVal Bool32
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a IsTexture request.
|
|
func (cook IsTextureCookie) Reply() (*IsTextureReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return isTextureReply(buf), nil
|
|
}
|
|
|
|
// isTextureReply reads a byte slice into a IsTextureReply value.
|
|
func isTextureReply(buf []byte) *IsTextureReply {
|
|
v := new(IsTextureReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.RetVal = Bool32(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
return v
|
|
}
|
|
|
|
// isTextureRequest writes a IsTexture request to a byte slice for transfer.
|
|
func isTextureRequest(c *xgb.Conn, ContextTag ContextTag, Texture uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 146 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Texture)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// MakeContextCurrentCookie is a cookie used only for MakeContextCurrent requests.
|
|
type MakeContextCurrentCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// MakeContextCurrent sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling MakeContextCurrentCookie.Reply.
|
|
func MakeContextCurrent(c *xgb.Conn, OldContextTag ContextTag, Drawable, ReadDrawable Drawable, Context Context) MakeContextCurrentCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'MakeContextCurrent' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(makeContextCurrentRequest(c, OldContextTag, Drawable, ReadDrawable, Context), cookie)
|
|
return MakeContextCurrentCookie{cookie}
|
|
}
|
|
|
|
// MakeContextCurrentUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func MakeContextCurrentUnchecked(c *xgb.Conn, OldContextTag ContextTag, Drawable, ReadDrawable Drawable, Context Context) MakeContextCurrentCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'MakeContextCurrent' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(makeContextCurrentRequest(c, OldContextTag, Drawable, ReadDrawable, Context), cookie)
|
|
return MakeContextCurrentCookie{cookie}
|
|
}
|
|
|
|
// MakeContextCurrentReply represents the data returned from a MakeContextCurrent request.
|
|
type MakeContextCurrentReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
ContextTag ContextTag
|
|
// padding: 20 bytes
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a MakeContextCurrent request.
|
|
func (cook MakeContextCurrentCookie) Reply() (*MakeContextCurrentReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return makeContextCurrentReply(buf), nil
|
|
}
|
|
|
|
// makeContextCurrentReply reads a byte slice into a MakeContextCurrentReply value.
|
|
func makeContextCurrentReply(buf []byte) *MakeContextCurrentReply {
|
|
v := new(MakeContextCurrentReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.ContextTag = ContextTag(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 20 // padding
|
|
|
|
return v
|
|
}
|
|
|
|
// makeContextCurrentRequest writes a MakeContextCurrent request to a byte slice for transfer.
|
|
func makeContextCurrentRequest(c *xgb.Conn, OldContextTag ContextTag, Drawable, ReadDrawable Drawable, Context Context) []byte {
|
|
size := 20
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 26 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(OldContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Drawable))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(ReadDrawable))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Context))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// MakeCurrentCookie is a cookie used only for MakeCurrent requests.
|
|
type MakeCurrentCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// MakeCurrent sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling MakeCurrentCookie.Reply.
|
|
func MakeCurrent(c *xgb.Conn, Drawable Drawable, Context Context, OldContextTag ContextTag) MakeCurrentCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'MakeCurrent' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(makeCurrentRequest(c, Drawable, Context, OldContextTag), cookie)
|
|
return MakeCurrentCookie{cookie}
|
|
}
|
|
|
|
// MakeCurrentUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func MakeCurrentUnchecked(c *xgb.Conn, Drawable Drawable, Context Context, OldContextTag ContextTag) MakeCurrentCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'MakeCurrent' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(makeCurrentRequest(c, Drawable, Context, OldContextTag), cookie)
|
|
return MakeCurrentCookie{cookie}
|
|
}
|
|
|
|
// MakeCurrentReply represents the data returned from a MakeCurrent request.
|
|
type MakeCurrentReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
ContextTag ContextTag
|
|
// padding: 20 bytes
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a MakeCurrent request.
|
|
func (cook MakeCurrentCookie) Reply() (*MakeCurrentReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return makeCurrentReply(buf), nil
|
|
}
|
|
|
|
// makeCurrentReply reads a byte slice into a MakeCurrentReply value.
|
|
func makeCurrentReply(buf []byte) *MakeCurrentReply {
|
|
v := new(MakeCurrentReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.ContextTag = ContextTag(xgb.Get32(buf[b:]))
|
|
b += 4
|
|
|
|
b += 20 // padding
|
|
|
|
return v
|
|
}
|
|
|
|
// makeCurrentRequest writes a MakeCurrent request to a byte slice for transfer.
|
|
func makeCurrentRequest(c *xgb.Conn, Drawable Drawable, Context Context, OldContextTag ContextTag) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 5 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Drawable))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Context))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(OldContextTag))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// NewListCookie is a cookie used only for NewList requests.
|
|
type NewListCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// NewList sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func NewList(c *xgb.Conn, ContextTag ContextTag, List, Mode uint32) NewListCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'NewList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(newListRequest(c, ContextTag, List, Mode), cookie)
|
|
return NewListCookie{cookie}
|
|
}
|
|
|
|
// NewListChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using NewListCookie.Check.
|
|
func NewListChecked(c *xgb.Conn, ContextTag ContextTag, List, Mode uint32) NewListCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'NewList' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(newListRequest(c, ContextTag, List, Mode), cookie)
|
|
return NewListCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook NewListCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// newListRequest writes a NewList request to a byte slice for transfer.
|
|
func newListRequest(c *xgb.Conn, ContextTag ContextTag, List, Mode uint32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 101 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], List)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Mode)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// PixelStorefCookie is a cookie used only for PixelStoref requests.
|
|
type PixelStorefCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// PixelStoref sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func PixelStoref(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum Float32) PixelStorefCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'PixelStoref' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(pixelStorefRequest(c, ContextTag, Pname, Datum), cookie)
|
|
return PixelStorefCookie{cookie}
|
|
}
|
|
|
|
// PixelStorefChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using PixelStorefCookie.Check.
|
|
func PixelStorefChecked(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum Float32) PixelStorefCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'PixelStoref' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(pixelStorefRequest(c, ContextTag, Pname, Datum), cookie)
|
|
return PixelStorefCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook PixelStorefCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// pixelStorefRequest writes a PixelStoref request to a byte slice for transfer.
|
|
func pixelStorefRequest(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum Float32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 109 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Datum))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// PixelStoreiCookie is a cookie used only for PixelStorei requests.
|
|
type PixelStoreiCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// PixelStorei sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func PixelStorei(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum int32) PixelStoreiCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'PixelStorei' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(pixelStoreiRequest(c, ContextTag, Pname, Datum), cookie)
|
|
return PixelStoreiCookie{cookie}
|
|
}
|
|
|
|
// PixelStoreiChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using PixelStoreiCookie.Check.
|
|
func PixelStoreiChecked(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum int32) PixelStoreiCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'PixelStorei' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(pixelStoreiRequest(c, ContextTag, Pname, Datum), cookie)
|
|
return PixelStoreiCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook PixelStoreiCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// pixelStoreiRequest writes a PixelStorei request to a byte slice for transfer.
|
|
func pixelStoreiRequest(c *xgb.Conn, ContextTag ContextTag, Pname uint32, Datum int32) []byte {
|
|
size := 16
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 110 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Pname)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Datum))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// QueryContextCookie is a cookie used only for QueryContext requests.
|
|
type QueryContextCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// QueryContext sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling QueryContextCookie.Reply.
|
|
func QueryContext(c *xgb.Conn, Context Context) QueryContextCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'QueryContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(queryContextRequest(c, Context), cookie)
|
|
return QueryContextCookie{cookie}
|
|
}
|
|
|
|
// QueryContextUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func QueryContextUnchecked(c *xgb.Conn, Context Context) QueryContextCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'QueryContext' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(queryContextRequest(c, Context), cookie)
|
|
return QueryContextCookie{cookie}
|
|
}
|
|
|
|
// QueryContextReply represents the data returned from a QueryContext request.
|
|
type QueryContextReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
NumAttribs uint32
|
|
// padding: 20 bytes
|
|
Attribs []uint32 // size: xgb.Pad(((int(NumAttribs) * 2) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a QueryContext request.
|
|
func (cook QueryContextCookie) Reply() (*QueryContextReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return queryContextReply(buf), nil
|
|
}
|
|
|
|
// queryContextReply reads a byte slice into a QueryContextReply value.
|
|
func queryContextReply(buf []byte) *QueryContextReply {
|
|
v := new(QueryContextReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.NumAttribs = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 20 // padding
|
|
|
|
v.Attribs = make([]uint32, (int(v.NumAttribs) * 2))
|
|
for i := 0; i < int((int(v.NumAttribs) * 2)); i++ {
|
|
v.Attribs[i] = xgb.Get32(buf[b:])
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// queryContextRequest writes a QueryContext request to a byte slice for transfer.
|
|
func queryContextRequest(c *xgb.Conn, Context Context) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 25 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(Context))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// QueryExtensionsStringCookie is a cookie used only for QueryExtensionsString requests.
|
|
type QueryExtensionsStringCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// QueryExtensionsString sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling QueryExtensionsStringCookie.Reply.
|
|
func QueryExtensionsString(c *xgb.Conn, Screen uint32) QueryExtensionsStringCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'QueryExtensionsString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(queryExtensionsStringRequest(c, Screen), cookie)
|
|
return QueryExtensionsStringCookie{cookie}
|
|
}
|
|
|
|
// QueryExtensionsStringUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func QueryExtensionsStringUnchecked(c *xgb.Conn, Screen uint32) QueryExtensionsStringCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'QueryExtensionsString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(queryExtensionsStringRequest(c, Screen), cookie)
|
|
return QueryExtensionsStringCookie{cookie}
|
|
}
|
|
|
|
// QueryExtensionsStringReply represents the data returned from a QueryExtensionsString request.
|
|
type QueryExtensionsStringReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
N uint32
|
|
// padding: 16 bytes
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a QueryExtensionsString request.
|
|
func (cook QueryExtensionsStringCookie) Reply() (*QueryExtensionsStringReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return queryExtensionsStringReply(buf), nil
|
|
}
|
|
|
|
// queryExtensionsStringReply reads a byte slice into a QueryExtensionsStringReply value.
|
|
func queryExtensionsStringReply(buf []byte) *QueryExtensionsStringReply {
|
|
v := new(QueryExtensionsStringReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 16 // padding
|
|
|
|
return v
|
|
}
|
|
|
|
// queryExtensionsStringRequest writes a QueryExtensionsString request to a byte slice for transfer.
|
|
func queryExtensionsStringRequest(c *xgb.Conn, Screen uint32) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 18 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], Screen)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// QueryServerStringCookie is a cookie used only for QueryServerString requests.
|
|
type QueryServerStringCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// QueryServerString sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling QueryServerStringCookie.Reply.
|
|
func QueryServerString(c *xgb.Conn, Screen, Name uint32) QueryServerStringCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'QueryServerString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(queryServerStringRequest(c, Screen, Name), cookie)
|
|
return QueryServerStringCookie{cookie}
|
|
}
|
|
|
|
// QueryServerStringUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func QueryServerStringUnchecked(c *xgb.Conn, Screen, Name uint32) QueryServerStringCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'QueryServerString' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(queryServerStringRequest(c, Screen, Name), cookie)
|
|
return QueryServerStringCookie{cookie}
|
|
}
|
|
|
|
// QueryServerStringReply represents the data returned from a QueryServerString request.
|
|
type QueryServerStringReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 4 bytes
|
|
StrLen uint32
|
|
// padding: 16 bytes
|
|
String string // size: xgb.Pad((int(StrLen) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a QueryServerString request.
|
|
func (cook QueryServerStringCookie) Reply() (*QueryServerStringReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return queryServerStringReply(buf), nil
|
|
}
|
|
|
|
// queryServerStringReply reads a byte slice into a QueryServerStringReply value.
|
|
func queryServerStringReply(buf []byte) *QueryServerStringReply {
|
|
v := new(QueryServerStringReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 4 // padding
|
|
|
|
v.StrLen = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 16 // padding
|
|
|
|
{
|
|
byteString := make([]byte, v.StrLen)
|
|
copy(byteString[:v.StrLen], buf[b:])
|
|
v.String = string(byteString)
|
|
b += int(v.StrLen)
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// queryServerStringRequest writes a QueryServerString request to a byte slice for transfer.
|
|
func queryServerStringRequest(c *xgb.Conn, Screen, Name uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 19 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], Screen)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Name)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// QueryVersionCookie is a cookie used only for QueryVersion requests.
|
|
type QueryVersionCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// QueryVersion sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling QueryVersionCookie.Reply.
|
|
func QueryVersion(c *xgb.Conn, MajorVersion, MinorVersion uint32) QueryVersionCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(queryVersionRequest(c, MajorVersion, MinorVersion), cookie)
|
|
return QueryVersionCookie{cookie}
|
|
}
|
|
|
|
// QueryVersionUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func QueryVersionUnchecked(c *xgb.Conn, MajorVersion, MinorVersion uint32) QueryVersionCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(queryVersionRequest(c, MajorVersion, MinorVersion), cookie)
|
|
return QueryVersionCookie{cookie}
|
|
}
|
|
|
|
// QueryVersionReply represents the data returned from a QueryVersion request.
|
|
type QueryVersionReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
MajorVersion uint32
|
|
MinorVersion uint32
|
|
// padding: 16 bytes
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a QueryVersion request.
|
|
func (cook QueryVersionCookie) Reply() (*QueryVersionReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return queryVersionReply(buf), nil
|
|
}
|
|
|
|
// queryVersionReply reads a byte slice into a QueryVersionReply value.
|
|
func queryVersionReply(buf []byte) *QueryVersionReply {
|
|
v := new(QueryVersionReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.MajorVersion = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.MinorVersion = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 16 // padding
|
|
|
|
return v
|
|
}
|
|
|
|
// queryVersionRequest writes a QueryVersion request to a byte slice for transfer.
|
|
func queryVersionRequest(c *xgb.Conn, MajorVersion, MinorVersion uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 7 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], MajorVersion)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], MinorVersion)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// ReadPixelsCookie is a cookie used only for ReadPixels requests.
|
|
type ReadPixelsCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// ReadPixels sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling ReadPixelsCookie.Reply.
|
|
func ReadPixels(c *xgb.Conn, ContextTag ContextTag, X, Y, Width, Height int32, Format, Type uint32, SwapBytes, LsbFirst bool) ReadPixelsCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'ReadPixels' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(readPixelsRequest(c, ContextTag, X, Y, Width, Height, Format, Type, SwapBytes, LsbFirst), cookie)
|
|
return ReadPixelsCookie{cookie}
|
|
}
|
|
|
|
// ReadPixelsUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func ReadPixelsUnchecked(c *xgb.Conn, ContextTag ContextTag, X, Y, Width, Height int32, Format, Type uint32, SwapBytes, LsbFirst bool) ReadPixelsCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'ReadPixels' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(readPixelsRequest(c, ContextTag, X, Y, Width, Height, Format, Type, SwapBytes, LsbFirst), cookie)
|
|
return ReadPixelsCookie{cookie}
|
|
}
|
|
|
|
// ReadPixelsReply represents the data returned from a ReadPixels request.
|
|
type ReadPixelsReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
// padding: 24 bytes
|
|
Data []byte // size: xgb.Pad(((int(Length) * 4) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a ReadPixels request.
|
|
func (cook ReadPixelsCookie) Reply() (*ReadPixelsReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return readPixelsReply(buf), nil
|
|
}
|
|
|
|
// readPixelsReply reads a byte slice into a ReadPixelsReply value.
|
|
func readPixelsReply(buf []byte) *ReadPixelsReply {
|
|
v := new(ReadPixelsReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
b += 24 // padding
|
|
|
|
v.Data = make([]byte, (int(v.Length) * 4))
|
|
copy(v.Data[:(int(v.Length)*4)], buf[b:])
|
|
b += int((int(v.Length) * 4))
|
|
|
|
return v
|
|
}
|
|
|
|
// readPixelsRequest writes a ReadPixels request to a byte slice for transfer.
|
|
func readPixelsRequest(c *xgb.Conn, ContextTag ContextTag, X, Y, Width, Height int32, Format, Type uint32, SwapBytes, LsbFirst bool) []byte {
|
|
size := 36
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 111 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(X))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Y))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Width))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Height))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Format)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Type)
|
|
b += 4
|
|
|
|
if SwapBytes {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
if LsbFirst {
|
|
buf[b] = 1
|
|
} else {
|
|
buf[b] = 0
|
|
}
|
|
b += 1
|
|
|
|
return buf
|
|
}
|
|
|
|
// RenderCookie is a cookie used only for Render requests.
|
|
type RenderCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// Render sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func Render(c *xgb.Conn, ContextTag ContextTag, Data []byte) RenderCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'Render' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(renderRequest(c, ContextTag, Data), cookie)
|
|
return RenderCookie{cookie}
|
|
}
|
|
|
|
// RenderChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using RenderCookie.Check.
|
|
func RenderChecked(c *xgb.Conn, ContextTag ContextTag, Data []byte) RenderCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'Render' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(renderRequest(c, ContextTag, Data), cookie)
|
|
return RenderCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook RenderCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// renderRequest writes a Render request to a byte slice for transfer.
|
|
func renderRequest(c *xgb.Conn, ContextTag ContextTag, Data []byte) []byte {
|
|
size := xgb.Pad((8 + xgb.Pad((len(Data) * 1))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 1 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
copy(buf[b:], Data[:len(Data)])
|
|
b += int(len(Data))
|
|
|
|
return buf
|
|
}
|
|
|
|
// RenderLargeCookie is a cookie used only for RenderLarge requests.
|
|
type RenderLargeCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// RenderLarge sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func RenderLarge(c *xgb.Conn, ContextTag ContextTag, RequestNum, RequestTotal uint16, DataLen uint32, Data []byte) RenderLargeCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'RenderLarge' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(renderLargeRequest(c, ContextTag, RequestNum, RequestTotal, DataLen, Data), cookie)
|
|
return RenderLargeCookie{cookie}
|
|
}
|
|
|
|
// RenderLargeChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using RenderLargeCookie.Check.
|
|
func RenderLargeChecked(c *xgb.Conn, ContextTag ContextTag, RequestNum, RequestTotal uint16, DataLen uint32, Data []byte) RenderLargeCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'RenderLarge' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(renderLargeRequest(c, ContextTag, RequestNum, RequestTotal, DataLen, Data), cookie)
|
|
return RenderLargeCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook RenderLargeCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// renderLargeRequest writes a RenderLarge request to a byte slice for transfer.
|
|
func renderLargeRequest(c *xgb.Conn, ContextTag ContextTag, RequestNum, RequestTotal uint16, DataLen uint32, Data []byte) []byte {
|
|
size := xgb.Pad((16 + xgb.Pad((int(DataLen) * 1))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 2 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put16(buf[b:], RequestNum)
|
|
b += 2
|
|
|
|
xgb.Put16(buf[b:], RequestTotal)
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], DataLen)
|
|
b += 4
|
|
|
|
copy(buf[b:], Data[:DataLen])
|
|
b += int(DataLen)
|
|
|
|
return buf
|
|
}
|
|
|
|
// RenderModeCookie is a cookie used only for RenderMode requests.
|
|
type RenderModeCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// RenderMode sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling RenderModeCookie.Reply.
|
|
func RenderMode(c *xgb.Conn, ContextTag ContextTag, Mode uint32) RenderModeCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'RenderMode' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(renderModeRequest(c, ContextTag, Mode), cookie)
|
|
return RenderModeCookie{cookie}
|
|
}
|
|
|
|
// RenderModeUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func RenderModeUnchecked(c *xgb.Conn, ContextTag ContextTag, Mode uint32) RenderModeCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'RenderMode' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(renderModeRequest(c, ContextTag, Mode), cookie)
|
|
return RenderModeCookie{cookie}
|
|
}
|
|
|
|
// RenderModeReply represents the data returned from a RenderMode request.
|
|
type RenderModeReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
RetVal uint32
|
|
N uint32
|
|
NewMode uint32
|
|
// padding: 12 bytes
|
|
Data []uint32 // size: xgb.Pad((int(N) * 4))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a RenderMode request.
|
|
func (cook RenderModeCookie) Reply() (*RenderModeReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return renderModeReply(buf), nil
|
|
}
|
|
|
|
// renderModeReply reads a byte slice into a RenderModeReply value.
|
|
func renderModeReply(buf []byte) *RenderModeReply {
|
|
v := new(RenderModeReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.RetVal = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.N = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.NewMode = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
b += 12 // padding
|
|
|
|
v.Data = make([]uint32, v.N)
|
|
for i := 0; i < int(v.N); i++ {
|
|
v.Data[i] = xgb.Get32(buf[b:])
|
|
b += 4
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
// renderModeRequest writes a RenderMode request to a byte slice for transfer.
|
|
func renderModeRequest(c *xgb.Conn, ContextTag ContextTag, Mode uint32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 107 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Mode)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// SelectBufferCookie is a cookie used only for SelectBuffer requests.
|
|
type SelectBufferCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// SelectBuffer sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func SelectBuffer(c *xgb.Conn, ContextTag ContextTag, Size int32) SelectBufferCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'SelectBuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(selectBufferRequest(c, ContextTag, Size), cookie)
|
|
return SelectBufferCookie{cookie}
|
|
}
|
|
|
|
// SelectBufferChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using SelectBufferCookie.Check.
|
|
func SelectBufferChecked(c *xgb.Conn, ContextTag ContextTag, Size int32) SelectBufferCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'SelectBuffer' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(selectBufferRequest(c, ContextTag, Size), cookie)
|
|
return SelectBufferCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook SelectBufferCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// selectBufferRequest writes a SelectBuffer request to a byte slice for transfer.
|
|
func selectBufferRequest(c *xgb.Conn, ContextTag ContextTag, Size int32) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 106 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Size))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// SetClientInfo2ARBCookie is a cookie used only for SetClientInfo2ARB requests.
|
|
type SetClientInfo2ARBCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// SetClientInfo2ARB sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func SetClientInfo2ARB(c *xgb.Conn, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen uint32, GlVersions []uint32, GlExtensionString, GlxExtensionString string) SetClientInfo2ARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'SetClientInfo2ARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(setClientInfo2ARBRequest(c, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen, GlVersions, GlExtensionString, GlxExtensionString), cookie)
|
|
return SetClientInfo2ARBCookie{cookie}
|
|
}
|
|
|
|
// SetClientInfo2ARBChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using SetClientInfo2ARBCookie.Check.
|
|
func SetClientInfo2ARBChecked(c *xgb.Conn, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen uint32, GlVersions []uint32, GlExtensionString, GlxExtensionString string) SetClientInfo2ARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'SetClientInfo2ARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(setClientInfo2ARBRequest(c, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen, GlVersions, GlExtensionString, GlxExtensionString), cookie)
|
|
return SetClientInfo2ARBCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook SetClientInfo2ARBCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// setClientInfo2ARBRequest writes a SetClientInfo2ARB request to a byte slice for transfer.
|
|
func setClientInfo2ARBRequest(c *xgb.Conn, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen uint32, GlVersions []uint32, GlExtensionString, GlxExtensionString string) []byte {
|
|
size := xgb.Pad((((24 + xgb.Pad(((int(NumVersions) * 3) * 4))) + xgb.Pad((int(GlStrLen) * 1))) + xgb.Pad((int(GlxStrLen) * 1))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 35 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], MajorVersion)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], MinorVersion)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], NumVersions)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], GlStrLen)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], GlxStrLen)
|
|
b += 4
|
|
|
|
for i := 0; i < int((int(NumVersions) * 3)); i++ {
|
|
xgb.Put32(buf[b:], GlVersions[i])
|
|
b += 4
|
|
}
|
|
|
|
copy(buf[b:], GlExtensionString[:GlStrLen])
|
|
b += int(GlStrLen)
|
|
|
|
copy(buf[b:], GlxExtensionString[:GlxStrLen])
|
|
b += int(GlxStrLen)
|
|
|
|
return buf
|
|
}
|
|
|
|
// SetClientInfoARBCookie is a cookie used only for SetClientInfoARB requests.
|
|
type SetClientInfoARBCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// SetClientInfoARB sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func SetClientInfoARB(c *xgb.Conn, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen uint32, GlVersions []uint32, GlExtensionString, GlxExtensionString string) SetClientInfoARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'SetClientInfoARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(setClientInfoARBRequest(c, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen, GlVersions, GlExtensionString, GlxExtensionString), cookie)
|
|
return SetClientInfoARBCookie{cookie}
|
|
}
|
|
|
|
// SetClientInfoARBChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using SetClientInfoARBCookie.Check.
|
|
func SetClientInfoARBChecked(c *xgb.Conn, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen uint32, GlVersions []uint32, GlExtensionString, GlxExtensionString string) SetClientInfoARBCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'SetClientInfoARB' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(setClientInfoARBRequest(c, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen, GlVersions, GlExtensionString, GlxExtensionString), cookie)
|
|
return SetClientInfoARBCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook SetClientInfoARBCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// setClientInfoARBRequest writes a SetClientInfoARB request to a byte slice for transfer.
|
|
func setClientInfoARBRequest(c *xgb.Conn, MajorVersion, MinorVersion, NumVersions, GlStrLen, GlxStrLen uint32, GlVersions []uint32, GlExtensionString, GlxExtensionString string) []byte {
|
|
size := xgb.Pad((((24 + xgb.Pad(((int(NumVersions) * 2) * 4))) + xgb.Pad((int(GlStrLen) * 1))) + xgb.Pad((int(GlxStrLen) * 1))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 33 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], MajorVersion)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], MinorVersion)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], NumVersions)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], GlStrLen)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], GlxStrLen)
|
|
b += 4
|
|
|
|
for i := 0; i < int((int(NumVersions) * 2)); i++ {
|
|
xgb.Put32(buf[b:], GlVersions[i])
|
|
b += 4
|
|
}
|
|
|
|
copy(buf[b:], GlExtensionString[:GlStrLen])
|
|
b += int(GlStrLen)
|
|
|
|
copy(buf[b:], GlxExtensionString[:GlxStrLen])
|
|
b += int(GlxStrLen)
|
|
|
|
return buf
|
|
}
|
|
|
|
// SwapBuffersCookie is a cookie used only for SwapBuffers requests.
|
|
type SwapBuffersCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// SwapBuffers sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func SwapBuffers(c *xgb.Conn, ContextTag ContextTag, Drawable Drawable) SwapBuffersCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'SwapBuffers' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(swapBuffersRequest(c, ContextTag, Drawable), cookie)
|
|
return SwapBuffersCookie{cookie}
|
|
}
|
|
|
|
// SwapBuffersChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using SwapBuffersCookie.Check.
|
|
func SwapBuffersChecked(c *xgb.Conn, ContextTag ContextTag, Drawable Drawable) SwapBuffersCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'SwapBuffers' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(swapBuffersRequest(c, ContextTag, Drawable), cookie)
|
|
return SwapBuffersCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook SwapBuffersCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// swapBuffersRequest writes a SwapBuffers request to a byte slice for transfer.
|
|
func swapBuffersRequest(c *xgb.Conn, ContextTag ContextTag, Drawable Drawable) []byte {
|
|
size := 12
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 11 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Drawable))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// UseXFontCookie is a cookie used only for UseXFont requests.
|
|
type UseXFontCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// UseXFont sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func UseXFont(c *xgb.Conn, ContextTag ContextTag, Font xproto.Font, First, Count, ListBase uint32) UseXFontCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'UseXFont' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(useXFontRequest(c, ContextTag, Font, First, Count, ListBase), cookie)
|
|
return UseXFontCookie{cookie}
|
|
}
|
|
|
|
// UseXFontChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using UseXFontCookie.Check.
|
|
func UseXFontChecked(c *xgb.Conn, ContextTag ContextTag, Font xproto.Font, First, Count, ListBase uint32) UseXFontCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'UseXFont' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(useXFontRequest(c, ContextTag, Font, First, Count, ListBase), cookie)
|
|
return UseXFontCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook UseXFontCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// useXFontRequest writes a UseXFont request to a byte slice for transfer.
|
|
func useXFontRequest(c *xgb.Conn, ContextTag ContextTag, Font xproto.Font, First, Count, ListBase uint32) []byte {
|
|
size := 24
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 12 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(Font))
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], First)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], Count)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], ListBase)
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// VendorPrivateCookie is a cookie used only for VendorPrivate requests.
|
|
type VendorPrivateCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// VendorPrivate sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func VendorPrivate(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) VendorPrivateCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'VendorPrivate' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(vendorPrivateRequest(c, VendorCode, ContextTag, Data), cookie)
|
|
return VendorPrivateCookie{cookie}
|
|
}
|
|
|
|
// VendorPrivateChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using VendorPrivateCookie.Check.
|
|
func VendorPrivateChecked(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) VendorPrivateCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'VendorPrivate' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(vendorPrivateRequest(c, VendorCode, ContextTag, Data), cookie)
|
|
return VendorPrivateCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook VendorPrivateCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// vendorPrivateRequest writes a VendorPrivate request to a byte slice for transfer.
|
|
func vendorPrivateRequest(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) []byte {
|
|
size := xgb.Pad((12 + xgb.Pad((len(Data) * 1))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 16 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], VendorCode)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
copy(buf[b:], Data[:len(Data)])
|
|
b += int(len(Data))
|
|
|
|
return buf
|
|
}
|
|
|
|
// VendorPrivateWithReplyCookie is a cookie used only for VendorPrivateWithReply requests.
|
|
type VendorPrivateWithReplyCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// VendorPrivateWithReply sends a checked request.
|
|
// If an error occurs, it will be returned with the reply by calling VendorPrivateWithReplyCookie.Reply.
|
|
func VendorPrivateWithReply(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) VendorPrivateWithReplyCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'VendorPrivateWithReply' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, true)
|
|
c.NewRequest(vendorPrivateWithReplyRequest(c, VendorCode, ContextTag, Data), cookie)
|
|
return VendorPrivateWithReplyCookie{cookie}
|
|
}
|
|
|
|
// VendorPrivateWithReplyUnchecked sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func VendorPrivateWithReplyUnchecked(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) VendorPrivateWithReplyCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'VendorPrivateWithReply' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, true)
|
|
c.NewRequest(vendorPrivateWithReplyRequest(c, VendorCode, ContextTag, Data), cookie)
|
|
return VendorPrivateWithReplyCookie{cookie}
|
|
}
|
|
|
|
// VendorPrivateWithReplyReply represents the data returned from a VendorPrivateWithReply request.
|
|
type VendorPrivateWithReplyReply struct {
|
|
Sequence uint16 // sequence number of the request for this reply
|
|
Length uint32 // number of bytes in this reply
|
|
// padding: 1 bytes
|
|
Retval uint32
|
|
Data1 []byte // size: 24
|
|
Data2 []byte // size: xgb.Pad(((int(Length) * 4) * 1))
|
|
}
|
|
|
|
// Reply blocks and returns the reply data for a VendorPrivateWithReply request.
|
|
func (cook VendorPrivateWithReplyCookie) Reply() (*VendorPrivateWithReplyReply, error) {
|
|
buf, err := cook.Cookie.Reply()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if buf == nil {
|
|
return nil, nil
|
|
}
|
|
return vendorPrivateWithReplyReply(buf), nil
|
|
}
|
|
|
|
// vendorPrivateWithReplyReply reads a byte slice into a VendorPrivateWithReplyReply value.
|
|
func vendorPrivateWithReplyReply(buf []byte) *VendorPrivateWithReplyReply {
|
|
v := new(VendorPrivateWithReplyReply)
|
|
b := 1 // skip reply determinant
|
|
|
|
b += 1 // padding
|
|
|
|
v.Sequence = xgb.Get16(buf[b:])
|
|
b += 2
|
|
|
|
v.Length = xgb.Get32(buf[b:]) // 4-byte units
|
|
b += 4
|
|
|
|
v.Retval = xgb.Get32(buf[b:])
|
|
b += 4
|
|
|
|
v.Data1 = make([]byte, 24)
|
|
copy(v.Data1[:24], buf[b:])
|
|
b += int(24)
|
|
|
|
v.Data2 = make([]byte, (int(v.Length) * 4))
|
|
copy(v.Data2[:(int(v.Length)*4)], buf[b:])
|
|
b += int((int(v.Length) * 4))
|
|
|
|
return v
|
|
}
|
|
|
|
// vendorPrivateWithReplyRequest writes a VendorPrivateWithReply request to a byte slice for transfer.
|
|
func vendorPrivateWithReplyRequest(c *xgb.Conn, VendorCode uint32, ContextTag ContextTag, Data []byte) []byte {
|
|
size := xgb.Pad((12 + xgb.Pad((len(Data) * 1))))
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 17 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], VendorCode)
|
|
b += 4
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
copy(buf[b:], Data[:len(Data)])
|
|
b += int(len(Data))
|
|
|
|
return buf
|
|
}
|
|
|
|
// WaitGLCookie is a cookie used only for WaitGL requests.
|
|
type WaitGLCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// WaitGL sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func WaitGL(c *xgb.Conn, ContextTag ContextTag) WaitGLCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'WaitGL' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(waitGLRequest(c, ContextTag), cookie)
|
|
return WaitGLCookie{cookie}
|
|
}
|
|
|
|
// WaitGLChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using WaitGLCookie.Check.
|
|
func WaitGLChecked(c *xgb.Conn, ContextTag ContextTag) WaitGLCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'WaitGL' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(waitGLRequest(c, ContextTag), cookie)
|
|
return WaitGLCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook WaitGLCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// waitGLRequest writes a WaitGL request to a byte slice for transfer.
|
|
func waitGLRequest(c *xgb.Conn, ContextTag ContextTag) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 8 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|
|
|
|
// WaitXCookie is a cookie used only for WaitX requests.
|
|
type WaitXCookie struct {
|
|
*xgb.Cookie
|
|
}
|
|
|
|
// WaitX sends an unchecked request.
|
|
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
|
|
func WaitX(c *xgb.Conn, ContextTag ContextTag) WaitXCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'WaitX' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(false, false)
|
|
c.NewRequest(waitXRequest(c, ContextTag), cookie)
|
|
return WaitXCookie{cookie}
|
|
}
|
|
|
|
// WaitXChecked sends a checked request.
|
|
// If an error occurs, it can be retrieved using WaitXCookie.Check.
|
|
func WaitXChecked(c *xgb.Conn, ContextTag ContextTag) WaitXCookie {
|
|
c.ExtLock.RLock()
|
|
defer c.ExtLock.RUnlock()
|
|
if _, ok := c.Extensions["GLX"]; !ok {
|
|
panic("Cannot issue request 'WaitX' using the uninitialized extension 'GLX'. glx.Init(connObj) must be called first.")
|
|
}
|
|
cookie := c.NewCookie(true, false)
|
|
c.NewRequest(waitXRequest(c, ContextTag), cookie)
|
|
return WaitXCookie{cookie}
|
|
}
|
|
|
|
// Check returns an error if one occurred for checked requests that are not expecting a reply.
|
|
// This cannot be called for requests expecting a reply, nor for unchecked requests.
|
|
func (cook WaitXCookie) Check() error {
|
|
return cook.Cookie.Check()
|
|
}
|
|
|
|
// waitXRequest writes a WaitX request to a byte slice for transfer.
|
|
func waitXRequest(c *xgb.Conn, ContextTag ContextTag) []byte {
|
|
size := 8
|
|
b := 0
|
|
buf := make([]byte, size)
|
|
|
|
c.ExtLock.RLock()
|
|
buf[b] = c.Extensions["GLX"]
|
|
c.ExtLock.RUnlock()
|
|
b += 1
|
|
|
|
buf[b] = 9 // request opcode
|
|
b += 1
|
|
|
|
xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
|
|
b += 2
|
|
|
|
xgb.Put32(buf[b:], uint32(ContextTag))
|
|
b += 4
|
|
|
|
return buf
|
|
}
|